Re: [PATCH v2 08/16] pidfs: remove pidfs_{get,put}_pid()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am Mi., 18. Juni 2025 um 22:54 Uhr schrieb Christian Brauner
<brauner@xxxxxxxxxx>:
>
> Now that we stash persistent information in struct pid there's no need
> to play volatile games with pinning struct pid via dentries in pidfs.
>
> Signed-off-by: Christian Brauner <brauner@xxxxxxxxxx>

Reviewed-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@xxxxxxxxxxxxx>

> ---
>  fs/coredump.c         |  6 ------
>  fs/pidfs.c            | 35 +----------------------------------
>  include/linux/pidfs.h |  2 --
>  net/unix/af_unix.c    |  5 -----
>  4 files changed, 1 insertion(+), 47 deletions(-)
>
> diff --git a/fs/coredump.c b/fs/coredump.c
> index f217ebf2b3b6..55d6a713a0fb 100644
> --- a/fs/coredump.c
> +++ b/fs/coredump.c
> @@ -898,12 +898,6 @@ void do_coredump(const kernel_siginfo_t *siginfo)
>                 retval = kernel_connect(socket, (struct sockaddr *)(&addr),
>                                         addr_len, O_NONBLOCK | SOCK_COREDUMP);
>
> -               /*
> -                * ... Make sure to only put our reference after connect() took
> -                * its own reference keeping the pidfs entry alive ...
> -                */
> -               pidfs_put_pid(cprm.pid);
> -
>                 if (retval) {
>                         if (retval == -EAGAIN)
>                                 coredump_report_failure("Coredump socket %s receive queue full", addr.sun_path);
> diff --git a/fs/pidfs.c b/fs/pidfs.c
> index c49c53d6ae51..bc2342cf4492 100644
> --- a/fs/pidfs.c
> +++ b/fs/pidfs.c
> @@ -895,8 +895,7 @@ static void pidfs_put_data(void *data)
>   * pidfs_register_pid - register a struct pid in pidfs
>   * @pid: pid to pin
>   *
> - * Register a struct pid in pidfs. Needs to be paired with
> - * pidfs_put_pid() to not risk leaking the pidfs dentry and inode.
> + * Register a struct pid in pidfs.
>   *
>   * Return: On success zero, on error a negative error code is returned.
>   */
> @@ -1007,38 +1006,6 @@ struct file *pidfs_alloc_file(struct pid *pid, unsigned int flags)
>         return pidfd_file;
>  }
>
> -/**
> - * pidfs_get_pid - pin a struct pid through pidfs
> - * @pid: pid to pin
> - *
> - * Similar to pidfs_register_pid() but only valid if the caller knows
> - * there's a reference to the @pid through a dentry already that can't
> - * go away.
> - */
> -void pidfs_get_pid(struct pid *pid)
> -{
> -       if (!pid)
> -               return;
> -       WARN_ON_ONCE(!stashed_dentry_get(&pid->stashed));
> -}
> -
> -/**
> - * pidfs_put_pid - drop a pidfs reference
> - * @pid: pid to drop
> - *
> - * Drop a reference to @pid via pidfs. This is only safe if the
> - * reference has been taken via pidfs_get_pid().
> - */
> -void pidfs_put_pid(struct pid *pid)
> -{
> -       might_sleep();
> -
> -       if (!pid)
> -               return;
> -       VFS_WARN_ON_ONCE(!pid->stashed);
> -       dput(pid->stashed);
> -}
> -
>  void __init pidfs_init(void)
>  {
>         pidfs_attr_cachep = kmem_cache_create("pidfs_attr_cache", sizeof(struct pidfs_attr), 0,
> diff --git a/include/linux/pidfs.h b/include/linux/pidfs.h
> index 8f6ed59bb3fb..3e08c33da2df 100644
> --- a/include/linux/pidfs.h
> +++ b/include/linux/pidfs.h
> @@ -14,8 +14,6 @@ void pidfs_coredump(const struct coredump_params *cprm);
>  #endif
>  extern const struct dentry_operations pidfs_dentry_operations;
>  int pidfs_register_pid(struct pid *pid);
> -void pidfs_get_pid(struct pid *pid);
> -void pidfs_put_pid(struct pid *pid);
>  void pidfs_free_pid(struct pid *pid);
>
>  #endif /* _LINUX_PID_FS_H */
> diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
> index 2e2e9997a68e..129388c309b0 100644
> --- a/net/unix/af_unix.c
> +++ b/net/unix/af_unix.c
> @@ -646,9 +646,6 @@ static void unix_sock_destructor(struct sock *sk)
>                 return;
>         }
>
> -       if (sk->sk_peer_pid)
> -               pidfs_put_pid(sk->sk_peer_pid);
> -
>         if (u->addr)
>                 unix_release_addr(u->addr);
>
> @@ -769,7 +766,6 @@ static void drop_peercred(struct unix_peercred *peercred)
>         swap(peercred->peer_pid, pid);
>         swap(peercred->peer_cred, cred);
>
> -       pidfs_put_pid(pid);
>         put_pid(pid);
>         put_cred(cred);
>  }
> @@ -802,7 +798,6 @@ static void copy_peercred(struct sock *sk, struct sock *peersk)
>
>         spin_lock(&sk->sk_peer_lock);
>         sk->sk_peer_pid = get_pid(peersk->sk_peer_pid);
> -       pidfs_get_pid(sk->sk_peer_pid);
>         sk->sk_peer_cred = get_cred(peersk->sk_peer_cred);
>         spin_unlock(&sk->sk_peer_lock);
>  }
>
> --
> 2.47.2
>




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux