Prechádzať zdrojové kódy

Kernel: Sending a signal to a process now goes to the main thread

Instead of falling back to the suspicious "any_thread()" mechanism,
just fail with ESRCH if you try to kill() a PID that doesn't have a
corresponding TID.
Andreas Kling 5 rokov pred
rodič
commit
0e7f85c24a
2 zmenil súbory, kde vykonal 8 pridanie a 9 odobranie
  1. 7 8
      Kernel/Process.cpp
  2. 1 1
      Kernel/Process.h

+ 7 - 8
Kernel/Process.cpp

@@ -2179,7 +2179,7 @@ KResult Process::do_kill(Process& process, int signal)
         return KResult(-EPERM);
     }
     if (signal != 0)
-        process.send_signal(signal, this);
+        return process.send_signal(signal, this);
     return KSuccess;
 }
 
@@ -3781,15 +3781,14 @@ void Process::terminate_due_to_signal(u8 signal)
     die();
 }
 
-void Process::send_signal(u8 signal, Process* sender)
+KResult Process::send_signal(u8 signal, Process* sender)
 {
     InterruptDisabler disabler;
-    if (!m_thread_count)
-        return;
-    auto* thread = Thread::from_tid(m_pid);
-    if (!thread)
-        thread = &any_thread();
-    thread->send_signal(signal, sender);
+    if (auto* thread = Thread::from_tid(m_pid)) {
+        thread->send_signal(signal, sender);
+        return KSuccess;
+    }
+    return KResult(-ESRCH);
 }
 
 int Process::sys$create_thread(void* (*entry)(void*), const Syscall::SC_create_thread_params* user_params)

+ 1 - 1
Kernel/Process.h

@@ -382,7 +382,7 @@ public:
     bool is_being_inspected() const { return m_inspector_count; }
 
     void terminate_due_to_signal(u8 signal);
-    void send_signal(u8, Process* sender);
+    KResult send_signal(u8 signal, Process* sender);
 
     u16 thread_count() const { return m_thread_count; }