ipcpipe Add pipe ownership guards
This commit is contained in:
@ -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];
|
||||
|
||||
|
Reference in New Issue
Block a user