OSDN Git Service

exit: Guarantee make_task_dead leaks the tsk when calling do_task_exit
authorEric W. Biederman <ebiederm@xmission.com>
Wed, 5 Jan 2022 22:30:21 +0000 (16:30 -0600)
committerEric W. Biederman <ebiederm@xmission.com>
Sat, 8 Jan 2022 16:51:23 +0000 (10:51 -0600)
Change the task state to EXIT_DEAD and take an extra rcu_refernce
to guarantee the task will not be reaped and that it will not be
freed.

Link: https://lkml.kernel.org/r/YdUzjrLAlRiNLQp2@zeniv-ca.linux.org.uk
Pointed-out-by: Al Viro <viro@zeniv.linux.org.uk>
Fixes: 7f80a2fd7db9 ("exit: Stop poorly open coding do_task_dead in make_task_dead")
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
kernel/exit.c

index 6c4b045..db4eeb7 100644 (file)
@@ -885,6 +885,8 @@ void __noreturn make_task_dead(int signr)
        if (unlikely(tsk->flags & PF_EXITING)) {
                pr_alert("Fixing recursive fault but reboot is needed!\n");
                futex_exit_recursive(tsk);
+               tsk->exit_state = EXIT_DEAD;
+               refcount_inc(&tsk->rcu_users);
                do_task_dead();
        }