瀏覽代碼

Kernel: Introduce "sigaction" pledge

You now have to pledge "sigaction" to change signal handlers/dispositions. This
is to prevent malicious code from messing with assertions (and segmentation
faults), which are normally expected to instantly terminate the process but can
do other things if you change signal disposition for them.
Sergey Bugaev 5 年之前
父節點
當前提交
cddaeb43d3
共有 2 個文件被更改,包括 2 次插入1 次删除
  1. 1 1
      Kernel/Process.cpp
  2. 1 0
      Kernel/Process.h

+ 1 - 1
Kernel/Process.cpp

@@ -2711,7 +2711,7 @@ int Process::sys$sigpending(sigset_t* set)
 
 
 int Process::sys$sigaction(int signum, const sigaction* act, sigaction* old_act)
 int Process::sys$sigaction(int signum, const sigaction* act, sigaction* old_act)
 {
 {
-    REQUIRE_PROMISE(stdio);
+    REQUIRE_PROMISE(sigaction);
     if (signum < 1 || signum >= 32 || signum == SIGKILL || signum == SIGSTOP)
     if (signum < 1 || signum >= 32 || signum == SIGKILL || signum == SIGSTOP)
         return -EINVAL;
         return -EINVAL;
     if (!validate_read_typed(act))
     if (!validate_read_typed(act))

+ 1 - 0
Kernel/Process.h

@@ -72,6 +72,7 @@ extern VirtualAddress g_return_to_ring3_from_signal_trampoline;
     __ENUMERATE_PLEDGE_PROMISE(video)   \
     __ENUMERATE_PLEDGE_PROMISE(video)   \
     __ENUMERATE_PLEDGE_PROMISE(accept)  \
     __ENUMERATE_PLEDGE_PROMISE(accept)  \
     __ENUMERATE_PLEDGE_PROMISE(settime) \
     __ENUMERATE_PLEDGE_PROMISE(settime) \
+    __ENUMERATE_PLEDGE_PROMISE(sigaction) \
     __ENUMERATE_PLEDGE_PROMISE(shared_buffer)
     __ENUMERATE_PLEDGE_PROMISE(shared_buffer)
 
 
 enum class Pledge : u32 {
 enum class Pledge : u32 {