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]); } }