diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 10a2c0ee19..b7c5c7808a 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -205,12 +205,16 @@ RefPtr Process::create_kernel_process(RefPtr& first_thread, Str void Process::protect_data() { - MM.set_page_writable_direct(VirtualAddress { this }, false); + m_protected_data_refs.unref([&]() { + MM.set_page_writable_direct(VirtualAddress { this }, false); + }); } void Process::unprotect_data() { - MM.set_page_writable_direct(VirtualAddress { this }, true); + m_protected_data_refs.ref([&]() { + MM.set_page_writable_direct(VirtualAddress { this }, true); + }); } RefPtr Process::create(RefPtr& first_thread, const String& name, uid_t uid, gid_t gid, ProcessID ppid, bool is_kernel_process, RefPtr cwd, RefPtr executable, TTY* tty, Process* fork_parent) diff --git a/Kernel/Process.h b/Kernel/Process.h index 7caca888bd..4a90db4fc2 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -569,6 +570,7 @@ private: RefPtr m_pg; + AtomicEdgeAction m_protected_data_refs; void protect_data(); void unprotect_data();