Commit 83b290c9 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Christian Brauner

pidfd: clone: allow CLONE_THREAD | CLONE_PIDFD together

copy_process() just needs to pass PIDFD_THREAD to __pidfd_prepare()
if clone_flags & CLONE_THREAD.

We can also add another CLONE_ flag (or perhaps reuse CLONE_DETACHED)
to enforce PIDFD_THREAD without CLONE_THREAD.

Originally-from: Tycho Andersen <tycho@tycho.pizza>
Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
Link: https://lore.kernel.org/r/20240205145532.GA28823@redhat.comReviewed-by: default avatarTycho Andersen <tandersen@netflix.com>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent e2e8a142
...@@ -2311,9 +2311,8 @@ __latent_entropy struct task_struct *copy_process( ...@@ -2311,9 +2311,8 @@ __latent_entropy struct task_struct *copy_process(
/* /*
* - CLONE_DETACHED is blocked so that we can potentially * - CLONE_DETACHED is blocked so that we can potentially
* reuse it later for CLONE_PIDFD. * reuse it later for CLONE_PIDFD.
* - CLONE_THREAD is blocked until someone really needs it.
*/ */
if (clone_flags & (CLONE_DETACHED | CLONE_THREAD)) if (clone_flags & CLONE_DETACHED)
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
} }
...@@ -2536,8 +2535,10 @@ __latent_entropy struct task_struct *copy_process( ...@@ -2536,8 +2535,10 @@ __latent_entropy struct task_struct *copy_process(
* if the fd table isn't shared). * if the fd table isn't shared).
*/ */
if (clone_flags & CLONE_PIDFD) { if (clone_flags & CLONE_PIDFD) {
int flags = (clone_flags & CLONE_THREAD) ? PIDFD_THREAD : 0;
/* Note that no task has been attached to @pid yet. */ /* Note that no task has been attached to @pid yet. */
retval = __pidfd_prepare(pid, 0, &pidfile); retval = __pidfd_prepare(pid, flags, &pidfile);
if (retval < 0) if (retval < 0)
goto bad_fork_free_pid; goto bad_fork_free_pid;
pidfd = retval; pidfd = retval;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment