lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250712063901.3761823-1-kuniyu@google.com>
Date: Sat, 12 Jul 2025 06:38:33 +0000
From: Kuniyuki Iwashima <kuniyu@...gle.com>
To: viro@...iv.linux.org.uk
Cc: linux-fsdevel@...r.kernel.org, netdev@...r.kernel.org, kuniyu@...gle.com
Subject: Re: [PATCH][RFC] don't bother with path_get()/path_put() in unix_open_file()

From: Al Viro <viro@...iv.linux.org.uk>
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@...iv.linux.org.uk>

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

Reviewed-by: Kuniyuki Iwashima <kuniyu@...gle.com>


> 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;
>  }

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ