From 08e0e2eb417d7c9a50b4309b4cdcef70b8554537 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 11 Mar 2021 13:23:23 +0100 Subject: [PATCH] Kernel: Move process umask into protected data :^) --- Kernel/Process.h | 3 +-- Kernel/Syscalls/fork.cpp | 5 ++--- Kernel/Syscalls/umask.cpp | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Kernel/Process.h b/Kernel/Process.h index 41128a00163..6ff695547b7 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -117,6 +117,7 @@ protected: u32 m_promises { 0 }; bool m_has_execpromises { false }; u32 m_execpromises { 0 }; + mode_t m_umask { 022 }; }; class ProcessBase : public ProtectedProcessBase { @@ -595,8 +596,6 @@ private: RefPtr m_tty; - mode_t m_umask { 022 }; - WeakPtr m_master_tls_region; size_t m_master_tls_size { 0 }; size_t m_master_tls_alignment { 0 }; diff --git a/Kernel/Syscalls/fork.cpp b/Kernel/Syscalls/fork.cpp index c1b1088157a..4016206d182 100644 --- a/Kernel/Syscalls/fork.cpp +++ b/Kernel/Syscalls/fork.cpp @@ -44,19 +44,18 @@ KResultOr Process::sys$fork(RegisterState& regs) child->m_veil_state = m_veil_state; child->m_unveiled_paths = m_unveiled_paths.deep_copy(); child->m_fds = m_fds; - child->m_umask = m_umask; child->m_signal_trampoline = m_signal_trampoline; child->m_pg = m_pg; { - child->unprotect_data(); + ProtectedDataMutationScope scope { *child }; child->m_promises = m_promises; child->m_execpromises = m_execpromises; child->m_has_promises = m_has_promises; child->m_has_execpromises = m_has_execpromises; child->m_sid = m_sid; child->m_extra_gids = m_extra_gids; - child->protect_data(); + child->m_umask = m_umask; } dbgln_if(FORK_DEBUG, "fork: child={}", child); diff --git a/Kernel/Syscalls/umask.cpp b/Kernel/Syscalls/umask.cpp index c2f05921365..fa26a8a2ed4 100644 --- a/Kernel/Syscalls/umask.cpp +++ b/Kernel/Syscalls/umask.cpp @@ -32,6 +32,7 @@ KResultOr Process::sys$umask(mode_t mask) { REQUIRE_PROMISE(stdio); auto old_mask = m_umask; + ProtectedDataMutationScope scope { *this }; m_umask = mask & 0777; return old_mask; }