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:
parent
727218ff4a
commit
bedd90b1f0
3 changed files with 12 additions and 16 deletions
|
@ -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> {
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue