]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
tty: convert ptm_open_peer() to FD_ADD()
authorChristian Brauner <brauner@kernel.org>
Sun, 23 Nov 2025 16:34:00 +0000 (17:34 +0100)
committerChristian Brauner <brauner@kernel.org>
Fri, 28 Nov 2025 11:42:36 +0000 (12:42 +0100)
Christian Brauner <brauner@kernel.org> says:

The fix sent in [1] was squashed into this commit.

Fixes: https://lore.kernel.org/37ac7af5-584f-4768-a462-4d1071c43eaf@sirena.org.uk [1]
Reported-by: Mark Brown <broonie@kernel.org> [1]
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> [1]
Link: https://patch.msgid.link/20251123-work-fd-prepare-v4-42-b6efa1706cfd@kernel.org
Signed-off-by: Christian Brauner <brauner@kernel.org>
drivers/tty/pty.c

index 8bb1a01fef2a1e6a011b5d3b5c03ad24ade2825c..41c1d909525c17448d046cb5f8f95bf0f9578018 100644 (file)
@@ -589,6 +589,23 @@ static inline void legacy_pty_init(void) { }
 #ifdef CONFIG_UNIX98_PTYS
 static struct cdev ptmx_cdev;
 
+static struct file *ptm_open_peer_file(struct file *master,
+                                      struct tty_struct *tty, int flags)
+{
+       struct path path;
+       struct file *file;
+
+       /* Compute the slave's path */
+       path.mnt = devpts_mntget(master, tty->driver_data);
+       if (IS_ERR(path.mnt))
+               return ERR_CAST(path.mnt);
+       path.dentry = tty->link->driver_data;
+
+       file = dentry_open(&path, flags, current_cred());
+       mntput(path.mnt);
+       return file;
+}
+
 /**
  *     ptm_open_peer - open the peer of a pty
  *     @master: the open struct file of the ptmx device node
@@ -601,42 +618,10 @@ static struct cdev ptmx_cdev;
  */
 int ptm_open_peer(struct file *master, struct tty_struct *tty, int flags)
 {
-       int fd;
-       struct file *filp;
-       int retval = -EINVAL;
-       struct path path;
-
        if (tty->driver != ptm_driver)
                return -EIO;
 
-       fd = get_unused_fd_flags(flags);
-       if (fd < 0) {
-               retval = fd;
-               goto err;
-       }
-
-       /* Compute the slave's path */
-       path.mnt = devpts_mntget(master, tty->driver_data);
-       if (IS_ERR(path.mnt)) {
-               retval = PTR_ERR(path.mnt);
-               goto err_put;
-       }
-       path.dentry = tty->link->driver_data;
-
-       filp = dentry_open(&path, flags, current_cred());
-       mntput(path.mnt);
-       if (IS_ERR(filp)) {
-               retval = PTR_ERR(filp);
-               goto err_put;
-       }
-
-       fd_install(fd, filp);
-       return fd;
-
-err_put:
-       put_unused_fd(fd);
-err:
-       return retval;
+       return FD_ADD(flags, ptm_open_peer_file(master, tty, flags));
 }
 
 static int pty_unix98_ioctl(struct tty_struct *tty,