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