From 0e4a35eb862ef0217c7e4b2a5af4e7a79cfbb9be Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Wed, 1 Oct 2025 19:57:09 +0200 Subject: [PATCH] ipcpipe Add pipe ownership guards --- kernel/syscall/ipcpipe.c | 7 +++---- kernel/syscall/processctl.c | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/kernel/syscall/ipcpipe.c b/kernel/syscall/ipcpipe.c index 53ff338..e2c4ba3 100644 --- a/kernel/syscall/ipcpipe.c +++ b/kernel/syscall/ipcpipe.c @@ -68,11 +68,11 @@ int32_t SYSCALL5(sys_ipcpipe, pid1, pipenum1, cmd1, buffer1, len1) { } spinlock_acquire(&proc->pipes_spinlock); - if (proc->pipes[pipenum] != NULL) { + if (proc->pipes[pipenum] != NULL && proc->pid == proc->pipes[pipenum]->ownerpid) { ipc_pipefree(proc->pipes[pipenum]); dlfree(proc->pipes[pipenum]); - proc->pipes[pipenum] = NULL; } + proc->pipes[pipenum] = NULL; spinlock_release(&proc->pipes_spinlock); ret = E_OK; } break; @@ -182,10 +182,9 @@ int32_t SYSCALL5(sys_ipcpipe, pid1, pipenum1, cmd1, buffer1, len1) { spinlock_acquire(&proc2->pipes_spinlock); spinlock_acquire(&proc->pipes_spinlock); - if (proc->pipes[pipenum] != NULL) { + if (proc->pipes[pipenum] != NULL && proc->pid == proc->pipes[pipenum]->ownerpid) { ipc_pipefree(proc->pipes[pipenum]); dlfree(proc->pipes[pipenum]); - proc->pipes[pipenum] = NULL; } proc->pipes[pipenum] = proc2->pipes[pipenum2]; diff --git a/kernel/syscall/processctl.c b/kernel/syscall/processctl.c index b694a16..81b5db3 100644 --- a/kernel/syscall/processctl.c +++ b/kernel/syscall/processctl.c @@ -62,10 +62,10 @@ int32_t SYSCALL5(sys_processctl, pid1, cmd1, arg1, arg2, arg3) { } size_t argslen = arg3; - char *(*args)[] = (char *(*)[])arg2; + char **args = (char **)arg2; if (args != NULL && argslen > 0) { for (size_t i = 0; i < argslen; i++) { - PROC_ARG(newproc, (*args)[i]); + PROC_ARG(newproc, args[i]); } }