summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Kernel/Process.cpp40
-rw-r--r--Kernel/Process.h114
-rw-r--r--Kernel/Syscalls/disown.cpp2
-rw-r--r--Kernel/Syscalls/execve.cpp20
-rw-r--r--Kernel/Syscalls/exit.cpp4
-rw-r--r--Kernel/Syscalls/fork.cpp18
-rw-r--r--Kernel/Syscalls/getuid.cpp4
-rw-r--r--Kernel/Syscalls/pledge.cpp12
-rw-r--r--Kernel/Syscalls/process.cpp2
-rw-r--r--Kernel/Syscalls/setpgid.cpp2
-rw-r--r--Kernel/Syscalls/setuid.cpp38
-rw-r--r--Kernel/Syscalls/umask.cpp4
12 files changed, 131 insertions, 129 deletions
diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp
index 26cd0c4955..94ca8f0c8a 100644
--- a/Kernel/Process.cpp
+++ b/Kernel/Process.cpp
@@ -216,14 +216,14 @@ RefPtr<Process> Process::create_kernel_process(RefPtr<Thread>& first_thread, Str
void Process::protect_data()
{
m_protected_data_refs.unref([&]() {
- MM.set_page_writable_direct(VirtualAddress { this }, false);
+ MM.set_page_writable_direct(VirtualAddress { &this->m_protected_values }, false);
});
}
void Process::unprotect_data()
{
m_protected_data_refs.ref([&]() {
- MM.set_page_writable_direct(VirtualAddress { this }, true);
+ MM.set_page_writable_direct(VirtualAddress { &this->m_protected_values }, true);
});
}
@@ -249,14 +249,14 @@ Process::Process(const String& name, uid_t uid, gid_t gid, ProcessID ppid, bool
// Ensure that we protect the process data when exiting the constructor.
ProtectedDataMutationScope scope { *this };
- m_pid = allocate_pid();
- m_ppid = ppid;
- m_uid = uid;
- m_gid = gid;
- m_euid = uid;
- m_egid = gid;
- m_suid = uid;
- m_sgid = gid;
+ m_protected_values.pid = allocate_pid();
+ m_protected_values.ppid = ppid;
+ m_protected_values.uid = uid;
+ m_protected_values.gid = gid;
+ m_protected_values.euid = uid;
+ m_protected_values.egid = gid;
+ m_protected_values.suid = uid;
+ m_protected_values.sgid = gid;
dbgln_if(PROCESS_DEBUG, "Created new process {}({})", m_name, this->pid().value());
}
@@ -386,7 +386,7 @@ void Process::crash(int signal, FlatPtr ip, bool out_of_memory)
}
{
ProtectedDataMutationScope scope { *this };
- m_termination_signal = signal;
+ m_protected_values.termination_signal = signal;
}
set_dump_core(!out_of_memory);
address_space().dump_regions();
@@ -482,11 +482,11 @@ siginfo_t Process::wait_info()
siginfo.si_pid = pid().value();
siginfo.si_uid = uid();
- if (m_termination_signal) {
- siginfo.si_status = m_termination_signal;
+ if (m_protected_values.termination_signal) {
+ siginfo.si_status = m_protected_values.termination_signal;
siginfo.si_code = CLD_KILLED;
} else {
- siginfo.si_status = m_termination_status;
+ siginfo.si_status = m_protected_values.termination_status;
siginfo.si_code = CLD_EXITED;
}
return siginfo;
@@ -690,8 +690,8 @@ void Process::terminate_due_to_signal(u8 signal)
dbgln("Terminating {} due to signal {}", *this, signal);
{
ProtectedDataMutationScope scope { *this };
- m_termination_status = 0;
- m_termination_signal = signal;
+ m_protected_values.termination_status = 0;
+ m_protected_values.termination_signal = signal;
}
die();
}
@@ -832,7 +832,7 @@ void Process::delete_perf_events_buffer()
bool Process::remove_thread(Thread& thread)
{
ProtectedDataMutationScope scope { *this };
- auto thread_cnt_before = m_thread_count.fetch_sub(1, AK::MemoryOrder::memory_order_acq_rel);
+ auto thread_cnt_before = m_protected_values.thread_count.fetch_sub(1, AK::MemoryOrder::memory_order_acq_rel);
VERIFY(thread_cnt_before != 0);
thread_list().with([&](auto& thread_list) {
thread_list.remove(thread);
@@ -843,7 +843,7 @@ bool Process::remove_thread(Thread& thread)
bool Process::add_thread(Thread& thread)
{
ProtectedDataMutationScope scope { *this };
- bool is_first = m_thread_count.fetch_add(1, AK::MemoryOrder::memory_order_relaxed) == 0;
+ bool is_first = m_protected_values.thread_count.fetch_add(1, AK::MemoryOrder::memory_order_relaxed) == 0;
thread_list().with([&](auto& thread_list) {
thread_list.append(thread);
});
@@ -852,10 +852,10 @@ bool Process::add_thread(Thread& thread)
void Process::set_dumpable(bool dumpable)
{
- if (dumpable == m_dumpable)
+ if (dumpable == m_protected_values.dumpable)
return;
ProtectedDataMutationScope scope { *this };
- m_dumpable = dumpable;
+ m_protected_values.dumpable = dumpable;
}
KResult Process::set_coredump_property(NonnullOwnPtr<KString> key, NonnullOwnPtr<KString> value)
diff --git a/Kernel/Process.h b/Kernel/Process.h
index 26dcc49d11..bea511b106 100644
--- a/Kernel/Process.h
+++ b/Kernel/Process.h
@@ -11,6 +11,7 @@
#include <AK/IntrusiveList.h>
#include <AK/IntrusiveListRelaxedConst.h>
#include <AK/NonnullRefPtrVector.h>
+#include <AK/OwnPtr.h>
#include <AK/String.h>
#include <AK/Userspace.h>
#include <AK/WeakPtr.h>
@@ -82,45 +83,36 @@ typedef HashMap<FlatPtr, RefPtr<FutexQueue>> FutexQueues;
struct LoadResult;
-class ProtectedProcessBase {
-protected:
- ProcessID m_pid { 0 };
- ProcessID m_ppid { 0 };
- SessionID m_sid { 0 };
- uid_t m_euid { 0 };
- gid_t m_egid { 0 };
- uid_t m_uid { 0 };
- gid_t m_gid { 0 };
- uid_t m_suid { 0 };
- gid_t m_sgid { 0 };
- Vector<gid_t> m_extra_gids;
- bool m_dumpable { false };
- Atomic<bool> m_has_promises { false };
- Atomic<u32> m_promises { 0 };
- Atomic<bool> m_has_execpromises { false };
- Atomic<u32> m_execpromises { 0 };
- mode_t m_umask { 022 };
- VirtualAddress m_signal_trampoline;
- Atomic<u32> m_thread_count { 0 };
- u8 m_termination_status { 0 };
- u8 m_termination_signal { 0 };
-};
-
-class ProcessBase : public ProtectedProcessBase {
-protected:
- // Without the alignas specifier here the compiler places this class into
- // the parent class' padding which then causes the members for the RefCounted
- // class to be placed within the first page of the Process class.
- alignas(ProtectedProcessBase) u8 m_process_base_padding[PAGE_SIZE - sizeof(ProtectedProcessBase)];
-};
-
-static_assert(sizeof(ProcessBase) == PAGE_SIZE);
-
class Process
- : public ProcessBase
- , public RefCounted<Process>
+ : public RefCounted<Process>
, public Weakable<Process> {
+private:
+ class ProtectedValues {
+ public:
+ ProcessID pid { 0 };
+ ProcessID ppid { 0 };
+ SessionID sid { 0 };
+ uid_t euid { 0 };
+ gid_t egid { 0 };
+ uid_t uid { 0 };
+ gid_t gid { 0 };
+ uid_t suid { 0 };
+ gid_t sgid { 0 };
+ Vector<gid_t> extra_gids;
+ bool dumpable { false };
+ Atomic<bool> has_promises { false };
+ Atomic<u32> promises { 0 };
+ Atomic<bool> has_execpromises { false };
+ Atomic<u32> execpromises { 0 };
+ mode_t umask { 022 };
+ VirtualAddress signal_trampoline;
+ Atomic<u32> thread_count { 0 };
+ u8 termination_status { 0 };
+ u8 termination_signal { 0 };
+ };
+
+public:
AK_MAKE_NONCOPYABLE(Process);
AK_MAKE_NONMOVABLE(Process);
@@ -205,24 +197,24 @@ public:
static SessionID get_sid_from_pgid(ProcessGroupID pgid);
const String& name() const { return m_name; }
- ProcessID pid() const { return m_pid; }
- SessionID sid() const { return m_sid; }
- bool is_session_leader() const { return m_sid.value() == m_pid.value(); }
+ ProcessID pid() const { return m_protected_values.pid; }
+ SessionID sid() const { return m_protected_values.sid; }
+ bool is_session_leader() const { return sid().value() == pid().value(); }
ProcessGroupID pgid() const { return m_pg ? m_pg->pgid() : 0; }
- bool is_group_leader() const { return pgid().value() == m_pid.value(); }
- const Vector<gid_t>& extra_gids() const { return m_extra_gids; }
- uid_t euid() const { return m_euid; }
- gid_t egid() const { return m_egid; }
- uid_t uid() const { return m_uid; }
- gid_t gid() const { return m_gid; }
- uid_t suid() const { return m_suid; }
- gid_t sgid() const { return m_sgid; }
- ProcessID ppid() const { return m_ppid; }
-
- bool is_dumpable() const { return m_dumpable; }
+ bool is_group_leader() const { return pgid().value() == pid().value(); }
+ const Vector<gid_t>& extra_gids() const { return m_protected_values.extra_gids; }
+ uid_t euid() const { return m_protected_values.euid; }
+ gid_t egid() const { return m_protected_values.egid; }
+ uid_t uid() const { return m_protected_values.uid; }
+ gid_t gid() const { return m_protected_values.gid; }
+ uid_t suid() const { return m_protected_values.suid; }
+ gid_t sgid() const { return m_protected_values.sgid; }
+ ProcessID ppid() const { return m_protected_values.ppid; }
+
+ bool is_dumpable() const { return m_protected_values.dumpable; }
void set_dumpable(bool);
- mode_t umask() const { return m_umask; }
+ mode_t umask() const { return m_protected_values.umask; }
bool in_group(gid_t) const;
@@ -448,11 +440,11 @@ public:
void terminate_due_to_signal(u8 signal);
KResult send_signal(u8 signal, Process* sender);
- u8 termination_signal() const { return m_termination_signal; }
+ u8 termination_signal() const { return m_protected_values.termination_signal; }
u16 thread_count() const
{
- return m_thread_count.load(AK::MemoryOrder::memory_order_relaxed);
+ return m_protected_values.thread_count.load(AK::MemoryOrder::memory_order_relaxed);
}
Mutex& big_lock() { return m_big_lock; }
@@ -462,8 +454,8 @@ public:
Custody& root_directory_relative_to_global_root();
void set_root_directory(const Custody&);
- bool has_promises() const { return m_has_promises; }
- bool has_promised(Pledge pledge) const { return m_promises & (1u << (u32)pledge); }
+ bool has_promises() const { return m_protected_values.has_promises; }
+ bool has_promised(Pledge pledge) const { return m_protected_values.promises & (1u << (u32)pledge); }
VeilState veil_state() const
{
@@ -509,7 +501,7 @@ public:
Memory::AddressSpace& address_space() { return *m_space; }
Memory::AddressSpace const& address_space() const { return *m_space; }
- VirtualAddress signal_trampoline() const { return m_signal_trampoline; }
+ VirtualAddress signal_trampoline() const { return m_protected_values.signal_trampoline; }
private:
friend class MemoryManager;
@@ -763,10 +755,20 @@ private:
NonnullRefPtrVector<Thread> m_threads_for_coredump;
+ static_assert(sizeof(ProtectedValues) < (PAGE_SIZE));
+ alignas(4096) ProtectedValues m_protected_values;
+ u8 m_protected_values_padding[PAGE_SIZE - sizeof(ProtectedValues)];
+
public:
using List = IntrusiveListRelaxedConst<Process, RawPtr<Process>, &Process::m_list_node>;
};
+// Note: Process object should be 2 pages of 4096 bytes each.
+// It's not expected that the Process object will expand further because the first
+// page is used for all unprotected values (which should be plenty of space for them).
+// The second page is being used exclusively for write-protected values.
+static_assert(sizeof(Process) == (PAGE_SIZE * 2));
+
extern RecursiveSpinLock g_profiling_lock;
ProtectedValue<Process::List>& processes();
diff --git a/Kernel/Syscalls/disown.cpp b/Kernel/Syscalls/disown.cpp
index 4e5cdbc8dc..09ac972dc3 100644
--- a/Kernel/Syscalls/disown.cpp
+++ b/Kernel/Syscalls/disown.cpp
@@ -18,7 +18,7 @@ KResultOr<FlatPtr> Process::sys$disown(ProcessID pid)
if (process->ppid() != this->pid())
return ECHILD;
ProtectedDataMutationScope scope(*process);
- process->m_ppid = 0;
+ process->m_protected_values.ppid = 0;
process->disowned_by_waiter(*this);
return 0;
}
diff --git a/Kernel/Syscalls/execve.cpp b/Kernel/Syscalls/execve.cpp
index 4b55c7f2e7..eef9d081de 100644
--- a/Kernel/Syscalls/execve.cpp
+++ b/Kernel/Syscalls/execve.cpp
@@ -540,14 +540,14 @@ KResult Process::do_exec(NonnullRefPtr<FileDescription> main_program_description
if (main_program_metadata.is_setuid()) {
executable_is_setid = true;
ProtectedDataMutationScope scope { *this };
- m_euid = main_program_metadata.uid;
- m_suid = main_program_metadata.uid;
+ m_protected_values.euid = main_program_metadata.uid;
+ m_protected_values.suid = main_program_metadata.uid;
}
if (main_program_metadata.is_setgid()) {
executable_is_setid = true;
ProtectedDataMutationScope scope { *this };
- m_egid = main_program_metadata.gid;
- m_sgid = main_program_metadata.gid;
+ m_protected_values.egid = main_program_metadata.gid;
+ m_protected_values.sgid = main_program_metadata.gid;
}
}
@@ -641,16 +641,16 @@ KResult Process::do_exec(NonnullRefPtr<FileDescription> main_program_description
{
ProtectedDataMutationScope scope { *this };
- m_promises = m_execpromises.load();
- m_has_promises = m_has_execpromises.load();
+ m_protected_values.promises = m_protected_values.execpromises.load();
+ m_protected_values.has_promises = m_protected_values.has_execpromises.load();
- m_execpromises = 0;
- m_has_execpromises = false;
+ m_protected_values.execpromises = 0;
+ m_protected_values.has_execpromises = false;
- m_signal_trampoline = signal_trampoline_region.value()->vaddr();
+ m_protected_values.signal_trampoline = signal_trampoline_region.value()->vaddr();
// FIXME: PID/TID ISSUE
- m_pid = new_main_thread->tid().value();
+ m_protected_values.pid = new_main_thread->tid().value();
}
auto tsr_result = new_main_thread->make_thread_specific_region({});
diff --git a/Kernel/Syscalls/exit.cpp b/Kernel/Syscalls/exit.cpp
index b4c2d80e54..df046179d5 100644
--- a/Kernel/Syscalls/exit.cpp
+++ b/Kernel/Syscalls/exit.cpp
@@ -20,8 +20,8 @@ void Process::sys$exit(int status)
{
ProtectedDataMutationScope scope { *this };
- m_termination_status = status;
- m_termination_signal = 0;
+ m_protected_values.termination_status = status;
+ m_protected_values.termination_signal = 0;
}
auto* current_thread = Thread::current();
diff --git a/Kernel/Syscalls/fork.cpp b/Kernel/Syscalls/fork.cpp
index cab53f8a19..867575e4a0 100644
--- a/Kernel/Syscalls/fork.cpp
+++ b/Kernel/Syscalls/fork.cpp
@@ -30,15 +30,15 @@ KResultOr<FlatPtr> Process::sys$fork(RegisterState& regs)
{
ProtectedDataMutationScope scope { *child };
- child->m_promises = m_promises.load();
- child->m_execpromises = m_execpromises.load();
- child->m_has_promises = m_has_promises.load();
- child->m_has_execpromises = m_has_execpromises.load();
- child->m_sid = m_sid;
- child->m_extra_gids = m_extra_gids;
- child->m_umask = m_umask;
- child->m_signal_trampoline = m_signal_trampoline;
- child->m_dumpable = m_dumpable;
+ child->m_protected_values.promises = m_protected_values.promises.load();
+ child->m_protected_values.execpromises = m_protected_values.execpromises.load();
+ child->m_protected_values.has_promises = m_protected_values.has_promises.load();
+ child->m_protected_values.has_execpromises = m_protected_values.has_execpromises.load();
+ child->m_protected_values.sid = m_protected_values.sid;
+ child->m_protected_values.extra_gids = m_protected_values.extra_gids;
+ child->m_protected_values.umask = m_protected_values.umask;
+ child->m_protected_values.signal_trampoline = m_protected_values.signal_trampoline;
+ child->m_protected_values.dumpable = m_protected_values.dumpable;
}
dbgln_if(FORK_DEBUG, "fork: child={}", child);
diff --git a/Kernel/Syscalls/getuid.cpp b/Kernel/Syscalls/getuid.cpp
index b94711e3dd..24a578b063 100644
--- a/Kernel/Syscalls/getuid.cpp
+++ b/Kernel/Syscalls/getuid.cpp
@@ -40,7 +40,7 @@ KResultOr<FlatPtr> Process::sys$getresuid(Userspace<uid_t*> ruid, Userspace<uid_
{
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this)
REQUIRE_PROMISE(stdio);
- if (!copy_to_user(ruid, &m_uid) || !copy_to_user(euid, &m_euid) || !copy_to_user(suid, &m_suid))
+ if (!copy_to_user(ruid, &m_protected_values.uid) || !copy_to_user(euid, &m_protected_values.euid) || !copy_to_user(suid, &m_protected_values.suid))
return EFAULT;
return 0;
}
@@ -49,7 +49,7 @@ KResultOr<FlatPtr> Process::sys$getresgid(Userspace<gid_t*> rgid, Userspace<gid_
{
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this)
REQUIRE_PROMISE(stdio);
- if (!copy_to_user(rgid, &m_gid) || !copy_to_user(egid, &m_egid) || !copy_to_user(sgid, &m_sgid))
+ if (!copy_to_user(rgid, &m_protected_values.gid) || !copy_to_user(egid, &m_protected_values.egid) || !copy_to_user(sgid, &m_protected_values.sgid))
return EFAULT;
return 0;
}
diff --git a/Kernel/Syscalls/pledge.cpp b/Kernel/Syscalls/pledge.cpp
index f021f718b1..5a24406272 100644
--- a/Kernel/Syscalls/pledge.cpp
+++ b/Kernel/Syscalls/pledge.cpp
@@ -56,7 +56,7 @@ KResultOr<FlatPtr> Process::sys$pledge(Userspace<const Syscall::SC_pledge_params
if (promises) {
if (!parse_pledge(promises->view(), new_promises))
return EINVAL;
- if (m_has_promises && (new_promises & ~m_promises))
+ if (m_protected_values.has_promises && (new_promises & ~m_protected_values.promises))
return EPERM;
}
@@ -64,7 +64,7 @@ KResultOr<FlatPtr> Process::sys$pledge(Userspace<const Syscall::SC_pledge_params
if (execpromises) {
if (!parse_pledge(execpromises->view(), new_execpromises))
return EINVAL;
- if (m_has_execpromises && (new_execpromises & ~m_execpromises))
+ if (m_protected_values.has_execpromises && (new_execpromises & ~m_protected_values.execpromises))
return EPERM;
}
@@ -74,13 +74,13 @@ KResultOr<FlatPtr> Process::sys$pledge(Userspace<const Syscall::SC_pledge_params
// leave the caller in an unexpected state.
if (promises) {
- m_promises = new_promises;
- m_has_promises = true;
+ m_protected_values.has_promises = true;
+ m_protected_values.promises = new_promises;
}
if (execpromises) {
- m_execpromises = new_execpromises;
- m_has_execpromises = true;
+ m_protected_values.has_execpromises = true;
+ m_protected_values.execpromises = new_execpromises;
}
return 0;
diff --git a/Kernel/Syscalls/process.cpp b/Kernel/Syscalls/process.cpp
index ac5414d41c..3a0c7acb78 100644
--- a/Kernel/Syscalls/process.cpp
+++ b/Kernel/Syscalls/process.cpp
@@ -20,7 +20,7 @@ KResultOr<FlatPtr> Process::sys$getppid()
{
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this)
REQUIRE_PROMISE(stdio);
- return m_ppid.value();
+ return m_protected_values.ppid.value();
}
KResultOr<FlatPtr> Process::sys$get_process_name(Userspace<char*> buffer, size_t buffer_size)
diff --git a/Kernel/Syscalls/setpgid.cpp b/Kernel/Syscalls/setpgid.cpp
index f9832b9f58..7800c5b3a9 100644
--- a/Kernel/Syscalls/setpgid.cpp
+++ b/Kernel/Syscalls/setpgid.cpp
@@ -40,7 +40,7 @@ KResultOr<FlatPtr> Process::sys$setsid()
m_pg = ProcessGroup::create(ProcessGroupID(pid().value()));
m_tty = nullptr;
ProtectedDataMutationScope scope { *this };
- m_sid = pid().value();
+ m_protected_values.sid = pid().value();
return sid().value();
}
diff --git a/Kernel/Syscalls/setuid.cpp b/Kernel/Syscalls/setuid.cpp
index 0a9e7e607c..a16c0eeedb 100644
--- a/Kernel/Syscalls/setuid.cpp
+++ b/Kernel/Syscalls/setuid.cpp
@@ -21,7 +21,7 @@ KResultOr<FlatPtr> Process::sys$seteuid(uid_t new_euid)
ProtectedDataMutationScope scope { *this };
- m_euid = new_euid;
+ m_protected_values.euid = new_euid;
return 0;
}
@@ -37,7 +37,7 @@ KResultOr<FlatPtr> Process::sys$setegid(gid_t new_egid)
set_dumpable(false);
ProtectedDataMutationScope scope { *this };
- m_egid = new_egid;
+ m_protected_values.egid = new_egid;
return 0;
}
@@ -53,9 +53,9 @@ KResultOr<FlatPtr> Process::sys$setuid(uid_t new_uid)
set_dumpable(false);
ProtectedDataMutationScope scope { *this };
- m_uid = new_uid;
- m_euid = new_uid;
- m_suid = new_uid;
+ m_protected_values.uid = new_uid;
+ m_protected_values.euid = new_uid;
+ m_protected_values.suid = new_uid;
return 0;
}
@@ -71,9 +71,9 @@ KResultOr<FlatPtr> Process::sys$setgid(gid_t new_gid)
set_dumpable(false);
ProtectedDataMutationScope scope { *this };
- m_gid = new_gid;
- m_egid = new_gid;
- m_sgid = new_gid;
+ m_protected_values.gid = new_gid;
+ m_protected_values.egid = new_gid;
+ m_protected_values.sgid = new_gid;
return 0;
}
@@ -98,8 +98,8 @@ KResultOr<FlatPtr> Process::sys$setreuid(uid_t new_ruid, uid_t new_euid)
set_dumpable(false);
ProtectedDataMutationScope scope { *this };
- m_uid = new_ruid;
- m_euid = new_euid;
+ m_protected_values.uid = new_ruid;
+ m_protected_values.euid = new_euid;
return 0;
}
@@ -123,9 +123,9 @@ KResultOr<FlatPtr> Process::sys$setresuid(uid_t new_ruid, uid_t new_euid, uid_t
set_dumpable(false);
ProtectedDataMutationScope scope { *this };
- m_uid = new_ruid;
- m_euid = new_euid;
- m_suid = new_suid;
+ m_protected_values.uid = new_ruid;
+ m_protected_values.euid = new_euid;
+ m_protected_values.suid = new_suid;
return 0;
}
@@ -149,9 +149,9 @@ KResultOr<FlatPtr> Process::sys$setresgid(gid_t new_rgid, gid_t new_egid, gid_t
set_dumpable(false);
ProtectedDataMutationScope scope { *this };
- m_gid = new_rgid;
- m_egid = new_egid;
- m_sgid = new_sgid;
+ m_protected_values.gid = new_rgid;
+ m_protected_values.egid = new_egid;
+ m_protected_values.sgid = new_sgid;
return 0;
}
@@ -164,7 +164,7 @@ KResultOr<FlatPtr> Process::sys$setgroups(size_t count, Userspace<const gid_t*>
if (!count) {
ProtectedDataMutationScope scope { *this };
- m_extra_gids.clear();
+ m_protected_values.extra_gids.clear();
return 0;
}
@@ -181,13 +181,13 @@ KResultOr<FlatPtr> Process::sys$setgroups(size_t count, Userspace<const gid_t*>
}
ProtectedDataMutationScope scope { *this };
- if (!m_extra_gids.try_resize(unique_extra_gids.size()))
+ if (!m_protected_values.extra_gids.try_resize(unique_extra_gids.size()))
return ENOMEM;
size_t i = 0;
for (auto& extra_gid : unique_extra_gids) {
if (extra_gid == gid())
continue;
- m_extra_gids[i++] = extra_gid;
+ m_protected_values.extra_gids[i++] = extra_gid;
}
return 0;
}
diff --git a/Kernel/Syscalls/umask.cpp b/Kernel/Syscalls/umask.cpp
index 16819f0215..e019fb0344 100644
--- a/Kernel/Syscalls/umask.cpp
+++ b/Kernel/Syscalls/umask.cpp
@@ -12,9 +12,9 @@ KResultOr<FlatPtr> Process::sys$umask(mode_t mask)
{
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this)
REQUIRE_PROMISE(stdio);
- auto old_mask = m_umask;
+ auto old_mask = m_protected_values.umask;
ProtectedDataMutationScope scope { *this };
- m_umask = mask & 0777;
+ m_protected_values.umask = mask & 0777;
return old_mask;
}