mirror of
https://github.com/RGBCube/serenity
synced 2025-07-23 19:37:34 +00:00
Kernel: Make sys$getsid not require the big lock
Reorganize the code slightly to avoid creating a TOCTOU bug, then mark the syscall as not needing the big lock anymore.
This commit is contained in:
parent
1382439267
commit
41f5598516
2 changed files with 8 additions and 7 deletions
|
@ -104,7 +104,7 @@ enum class NeedsBigProcessLock {
|
||||||
S(getresgid, NeedsBigProcessLock::No) \
|
S(getresgid, NeedsBigProcessLock::No) \
|
||||||
S(getresuid, NeedsBigProcessLock::No) \
|
S(getresuid, NeedsBigProcessLock::No) \
|
||||||
S(getrusage, NeedsBigProcessLock::Yes) \
|
S(getrusage, NeedsBigProcessLock::Yes) \
|
||||||
S(getsid, NeedsBigProcessLock::Yes) \
|
S(getsid, NeedsBigProcessLock::No) \
|
||||||
S(getsockname, NeedsBigProcessLock::Yes) \
|
S(getsockname, NeedsBigProcessLock::Yes) \
|
||||||
S(getsockopt, NeedsBigProcessLock::No) \
|
S(getsockopt, NeedsBigProcessLock::No) \
|
||||||
S(gettid, NeedsBigProcessLock::No) \
|
S(gettid, NeedsBigProcessLock::No) \
|
||||||
|
|
|
@ -12,16 +12,17 @@ namespace Kernel {
|
||||||
|
|
||||||
ErrorOr<FlatPtr> Process::sys$getsid(pid_t pid)
|
ErrorOr<FlatPtr> Process::sys$getsid(pid_t pid)
|
||||||
{
|
{
|
||||||
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this);
|
VERIFY_NO_PROCESS_BIG_LOCK(this);
|
||||||
TRY(require_promise(Pledge::stdio));
|
TRY(require_promise(Pledge::stdio));
|
||||||
if (pid == 0)
|
if (pid == 0 || pid == this->pid())
|
||||||
return sid().value();
|
return sid().value();
|
||||||
auto process = Process::from_pid_in_same_jail(pid);
|
auto peer = Process::from_pid_in_same_jail(pid);
|
||||||
if (!process)
|
if (!peer)
|
||||||
return ESRCH;
|
return ESRCH;
|
||||||
if (sid() != process->sid())
|
auto peer_sid = peer->sid();
|
||||||
|
if (sid() != peer_sid)
|
||||||
return EPERM;
|
return EPERM;
|
||||||
return process->sid().value();
|
return peer_sid.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<FlatPtr> Process::sys$setsid()
|
ErrorOr<FlatPtr> Process::sys$setsid()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue