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);
|
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];
|
||||||
|
|
||||||
|
@ -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]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user