Re: [PATCH][RFC] don't bother with path_get()/path_put() in unix_open_file()

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

 



From: Al Viro <viro@xxxxxxxxxxxxxxxxxx>
Date: Sat, 12 Jul 2025 06:41:57 +0100
> Once unix_sock ->path is set, we are guaranteed that its ->path will remain
> unchanged (and pinned) until the socket is closed.  OTOH, dentry_open()
> does not modify the path passed to it.
> 
> IOW, there's no need to copy unix_sk(sk)->path in unix_open_file() - we
> can just pass it to dentry_open() and be done with that.
> 
> Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx>

Sounds good.  I confirmed vfs_open() copies the passed const path ptr.

Reviewed-by: Kuniyuki Iwashima <kuniyu@xxxxxxxxxx>


> diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
> index 52b155123985..019ba2609b66 100644
> --- a/net/unix/af_unix.c
> +++ b/net/unix/af_unix.c
> @@ -3191,7 +3191,6 @@ EXPORT_SYMBOL_GPL(unix_outq_len);
>  
>  static int unix_open_file(struct sock *sk)
>  {
> -	struct path path;
>  	struct file *f;
>  	int fd;
>  
> @@ -3201,27 +3200,20 @@ static int unix_open_file(struct sock *sk)
>  	if (!smp_load_acquire(&unix_sk(sk)->addr))
>  		return -ENOENT;
>  
> -	path = unix_sk(sk)->path;
> -	if (!path.dentry)
> +	if (!unix_sk(sk)->path.dentry)
>  		return -ENOENT;
>  
> -	path_get(&path);
> -
>  	fd = get_unused_fd_flags(O_CLOEXEC);
>  	if (fd < 0)
> -		goto out;
> +		return fd;
>  
> -	f = dentry_open(&path, O_PATH, current_cred());
> +	f = dentry_open(&unix_sk(sk)->path, O_PATH, current_cred());
>  	if (IS_ERR(f)) {
>  		put_unused_fd(fd);
> -		fd = PTR_ERR(f);
> -		goto out;
> +		return PTR_ERR(f);
>  	}
>  
>  	fd_install(fd, f);
> -out:
> -	path_put(&path);
> -
>  	return fd;
>  }




[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