They don't take signals individually, and even if they share signals with
the parent task, don't allow them to be delivered through the worker
thread.

Reported-by: Stefan Metzmacher <me...@samba.org>
Signed-off-by: Jens Axboe <ax...@kernel.dk>
---
 kernel/signal.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/kernel/signal.c b/kernel/signal.c
index ba4d1ef39a9e..730ecd3d6faf 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -833,6 +833,9 @@ static int check_kill_permission(int sig, struct 
kernel_siginfo *info,
 
        if (!valid_signal(sig))
                return -EINVAL;
+       /* PF_IO_WORKER threads don't take any signals */
+       if (t->flags & PF_IO_WORKER)
+               return -EPERM;
 
        if (!si_fromuser(info))
                return 0;
-- 
2.31.0

Reply via email to