1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 20:37:34 +00:00

Kernel: Properly lock Process protected data in the prctl syscall

This commit is contained in:
Liav A 2022-12-25 12:11:27 +02:00 committed by Linus Groh
parent 727218ff4a
commit bedd90b1f0
3 changed files with 12 additions and 16 deletions

View file

@ -1017,13 +1017,6 @@ bool Process::add_thread(Thread& thread)
return is_first; return is_first;
} }
void Process::set_dumpable(bool dumpable)
{
with_mutable_protected_data([&](auto& protected_data) {
protected_data.dumpable = dumpable;
});
}
ErrorOr<void> Process::set_coredump_property(NonnullOwnPtr<KString> key, NonnullOwnPtr<KString> value) ErrorOr<void> Process::set_coredump_property(NonnullOwnPtr<KString> key, NonnullOwnPtr<KString> value)
{ {
return m_coredump_properties.with([&](auto& coredump_properties) -> ErrorOr<void> { return m_coredump_properties.with([&](auto& coredump_properties) -> ErrorOr<void> {

View file

@ -249,7 +249,6 @@ public:
{ {
return with_protected_data([](auto& protected_data) { return protected_data.dumpable; }); return with_protected_data([](auto& protected_data) { return protected_data.dumpable; });
} }
void set_dumpable(bool);
mode_t umask() const mode_t umask() const
{ {

View file

@ -12,14 +12,18 @@ namespace Kernel {
ErrorOr<FlatPtr> Process::sys$prctl(int option, FlatPtr arg1, [[maybe_unused]] FlatPtr arg2) ErrorOr<FlatPtr> Process::sys$prctl(int option, FlatPtr arg1, [[maybe_unused]] FlatPtr arg2)
{ {
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this); VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this);
switch (option) { return with_mutable_protected_data([&](auto& protected_data) -> ErrorOr<FlatPtr> {
case PR_GET_DUMPABLE: switch (option) {
return is_dumpable(); case PR_GET_DUMPABLE:
case PR_SET_DUMPABLE: return protected_data.dumpable;
set_dumpable(arg1); case PR_SET_DUMPABLE:
return 0; if (arg1 != 0 && arg1 != 1)
} return EINVAL;
return EINVAL; protected_data.dumpable = arg1;
return 0;
}
return EINVAL;
});
} }
} }