Am Di., 17. Juni 2025 um 17:42 Uhr schrieb Christian Brauner <brauner@xxxxxxxxxx>: > > The validation is now completely handled in path_from_stashed(). > > Signed-off-by: Christian Brauner <brauner@xxxxxxxxxx> Reviewed-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@xxxxxxxxxxxxx> > --- > fs/pidfs.c | 48 ------------------------------------------------ > 1 file changed, 48 deletions(-) > > diff --git a/fs/pidfs.c b/fs/pidfs.c > index ee5e9a18c2d3..9373d03fd263 100644 > --- a/fs/pidfs.c > +++ b/fs/pidfs.c > @@ -869,53 +869,8 @@ static int pidfs_export_permission(struct handle_to_path_ctx *ctx, > return 0; > } > > -static inline bool pidfs_pid_valid(struct pid *pid, const struct path *path, > - unsigned int flags) > -{ > - enum pid_type type; > - > - if (flags & PIDFD_STALE) > - return true; > - > - /* > - * Make sure that if a pidfd is created PIDFD_INFO_EXIT > - * information will be available. So after an inode for the > - * pidfd has been allocated perform another check that the pid > - * is still alive. If it is exit information is available even > - * if the task gets reaped before the pidfd is returned to > - * userspace. The only exception are indicated by PIDFD_STALE: > - * > - * (1) The kernel is in the middle of task creation and thus no > - * task linkage has been established yet. > - * (2) The caller knows @pid has been registered in pidfs at a > - * time when the task was still alive. > - * > - * In both cases exit information will have been reported. > - */ > - if (flags & PIDFD_THREAD) > - type = PIDTYPE_PID; > - else > - type = PIDTYPE_TGID; > - > - /* > - * Since pidfs_exit() is called before struct pid's task linkage > - * is removed the case where the task got reaped but a dentry > - * was already attached to struct pid and exit information was > - * recorded and published can be handled correctly. > - */ > - if (unlikely(!pid_has_task(pid, type))) { > - struct inode *inode = d_inode(path->dentry); > - return !!READ_ONCE(pidfs_i(inode)->exit_info); > - } > - > - return true; > -} > - > static struct file *pidfs_export_open(struct path *path, unsigned int oflags) > { > - if (!pidfs_pid_valid(d_inode(path->dentry)->i_private, path, oflags)) > - return ERR_PTR(-ESRCH); > - > /* > * Clear O_LARGEFILE as open_by_handle_at() forces it and raise > * O_RDWR as pidfds always are. > @@ -1032,9 +987,6 @@ struct file *pidfs_alloc_file(struct pid *pid, unsigned int flags) > if (ret < 0) > return ERR_PTR(ret); > > - if (!pidfs_pid_valid(pid, &path, flags)) > - return ERR_PTR(-ESRCH); > - > flags &= ~PIDFD_STALE; > flags |= O_RDWR; > pidfd_file = dentry_open(&path, flags, current_cred()); > > -- > 2.47.2 >