1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 21:17:45 +00:00

Kernel: Guard Process "protected data" with a spinlock

This ensures that both mutable and immutable access to the protected
data of a process is serialized.

Note that there may still be multiple TOCTOU issues around this, as we
have a bunch of convenience accessors that make it easy to introduce
them. We'll need to audit those as well.
This commit is contained in:
Andreas Kling 2022-08-21 12:18:26 +02:00
parent 728c3fbd14
commit 8ed06ad814
11 changed files with 348 additions and 300 deletions

View file

@ -17,8 +17,9 @@ ErrorOr<FlatPtr> Process::sys$disown(ProcessID pid)
return ESRCH;
if (process->ppid() != this->pid())
return ECHILD;
ProtectedDataMutationScope scope(*process);
process->m_protected_values.ppid = 0;
process->with_mutable_protected_data([](auto& protected_data) {
protected_data.ppid = 0;
});
process->disowned_by_waiter(*this);
return 0;
}