Skip to content

Commit 1f4153d

Browse files
braunergregkh
authored andcommitted
Revert "pidfd: prevent creation of pidfds for kthreads"
commit 232590e upstream. This reverts commit 3b5bbe7. Eric reported that systemd-shutdown gets broken by blocking the creating of pidfds for kthreads as older versions seems to rely on being able to create a pidfd for any process in /proc. Reported-by: Eric Biggers <ebiggers@kernel.org> Link: https://lore.kernel.org/r/20240818035818.GA1929@sol.localdomain Signed-off-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent a3211a4 commit 1f4153d

1 file changed

Lines changed: 3 additions & 22 deletions

File tree

kernel/fork.c

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2069,23 +2069,10 @@ static int __pidfd_prepare(struct pid *pid, unsigned int flags, struct file **re
20692069
*/
20702070
int pidfd_prepare(struct pid *pid, unsigned int flags, struct file **ret)
20712071
{
2072-
if (!pid)
2073-
return -EINVAL;
2074-
2075-
scoped_guard(rcu) {
2076-
struct task_struct *tsk;
2077-
2078-
if (flags & PIDFD_THREAD)
2079-
tsk = pid_task(pid, PIDTYPE_PID);
2080-
else
2081-
tsk = pid_task(pid, PIDTYPE_TGID);
2082-
if (!tsk)
2083-
return -EINVAL;
2072+
bool thread = flags & PIDFD_THREAD;
20842073

2085-
/* Don't create pidfds for kernel threads for now. */
2086-
if (tsk->flags & PF_KTHREAD)
2087-
return -EINVAL;
2088-
}
2074+
if (!pid || !pid_has_task(pid, thread ? PIDTYPE_PID : PIDTYPE_TGID))
2075+
return -EINVAL;
20892076

20902077
return __pidfd_prepare(pid, flags, ret);
20912078
}
@@ -2432,12 +2419,6 @@ __latent_entropy struct task_struct *copy_process(
24322419
if (clone_flags & CLONE_PIDFD) {
24332420
int flags = (clone_flags & CLONE_THREAD) ? PIDFD_THREAD : 0;
24342421

2435-
/* Don't create pidfds for kernel threads for now. */
2436-
if (args->kthread) {
2437-
retval = -EINVAL;
2438-
goto bad_fork_free_pid;
2439-
}
2440-
24412422
/* Note that no task has been attached to @pid yet. */
24422423
retval = __pidfd_prepare(pid, flags, &pidfile);
24432424
if (retval < 0)

0 commit comments

Comments
 (0)