ipcpipe Add pipe ownership guards

This commit is contained in:
2025-10-01 19:57:09 +02:00
parent fa8a774115
commit 0e4a35eb86
2 changed files with 5 additions and 6 deletions

View File

@ -68,11 +68,11 @@ int32_t SYSCALL5(sys_ipcpipe, pid1, pipenum1, cmd1, buffer1, len1) {
} }
spinlock_acquire(&proc->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]); ipc_pipefree(proc->pipes[pipenum]);
dlfree(proc->pipes[pipenum]); dlfree(proc->pipes[pipenum]);
proc->pipes[pipenum] = NULL;
} }
proc->pipes[pipenum] = NULL;
spinlock_release(&proc->pipes_spinlock); spinlock_release(&proc->pipes_spinlock);
ret = E_OK; ret = E_OK;
} break; } break;
@ -182,10 +182,9 @@ int32_t SYSCALL5(sys_ipcpipe, pid1, pipenum1, cmd1, buffer1, len1) {
spinlock_acquire(&proc2->pipes_spinlock); spinlock_acquire(&proc2->pipes_spinlock);
spinlock_acquire(&proc->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]); ipc_pipefree(proc->pipes[pipenum]);
dlfree(proc->pipes[pipenum]); dlfree(proc->pipes[pipenum]);
proc->pipes[pipenum] = NULL;
} }
proc->pipes[pipenum] = proc2->pipes[pipenum2]; proc->pipes[pipenum] = proc2->pipes[pipenum2];

View File

@ -62,10 +62,10 @@ int32_t SYSCALL5(sys_processctl, pid1, cmd1, arg1, arg2, arg3) {
} }
size_t argslen = arg3; size_t argslen = arg3;
char *(*args)[] = (char *(*)[])arg2; char **args = (char **)arg2;
if (args != NULL && argslen > 0) { if (args != NULL && argslen > 0) {
for (size_t i = 0; i < argslen; i++) { for (size_t i = 0; i < argslen; i++) {
PROC_ARG(newproc, (*args)[i]); PROC_ARG(newproc, args[i]);
} }
} }