fork: Add kernel_clone_args flag to ignore signals
authorMike Christie <michael.christie@oracle.com>
Fri, 10 Mar 2023 22:03:28 +0000 (16:03 -0600)
committerChristian Brauner (Microsoft) <brauner@kernel.org>
Sun, 12 Mar 2023 09:54:43 +0000 (10:54 +0100)
Since:

commit 10ab825bdef8 ("change kernel threads to ignore signals instead of
blocking them")

kthreads have been ignoring signals by default, and the vhost layer has
never had a need to change that. This patch adds an option flag,
USER_WORKER_SIG_IGN, handled in copy_process() after copy_sighand()
and copy_signals() so vhost_tasks added in the next patches can continue
to ignore singals.

Signed-off-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Mike Christie <michael.christie@oracle.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>
include/linux/sched/task.h
kernel/fork.c

index 4f816048794fb5f38902108eb8b74b249b083c52..00c54bfac0b56cfba95973944565083f99ac437d 100644 (file)
@@ -29,6 +29,7 @@ struct kernel_clone_args {
        u32 io_thread:1;
        u32 user_worker:1;
        u32 no_files:1;
+       u32 ignore_signals:1;
        unsigned long stack;
        unsigned long stack_size;
        unsigned long tls;
index f8d530f4406e824c4514cde86acab89020314663..2918c685ede5cb6f1f9ccdd06ad93de66f1698a5 100644 (file)
@@ -2290,6 +2290,9 @@ static __latent_entropy struct task_struct *copy_process(
        if (retval)
                goto bad_fork_cleanup_io;
 
+       if (args->ignore_signals)
+               ignore_signals(p);
+
        stackleak_task_init(p);
 
        if (pid != &init_struct_pid) {