]> git.baikalelectronics.ru Git - kernel.git/commit
pty: Repair TIOCGPTPEER
authorEric W. Biederman <ebiederm@xmission.com>
Thu, 24 Aug 2017 20:13:29 +0000 (15:13 -0500)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 24 Aug 2017 20:23:03 +0000 (13:23 -0700)
commit2c4c90b27b0c50e4ce047b92a60cf817739505fb
tree3544e8fe5997e64ce3fb2768578bea34d1d425fa
parent37388839959c54dd6821e21457fbf07933a1eb8c
pty: Repair TIOCGPTPEER

The implementation of TIOCGPTPEER has two issues.

When /dev/ptmx (as opposed to /dev/pts/ptmx) is opened the wrong
vfsmount is passed to dentry_open.  Which results in the kernel displaying
the wrong pathname for the peer.

The second is simply by caching the vfsmount and dentry of the peer it leaves
them open, in a way they were not previously Which because of the inreased
reference counts can cause unnecessary behaviour differences resulting in
regressions.

To fix these move the ioctl into tty_io.c at a generic level allowing
the ioctl to have access to the struct file on which the ioctl is
being called.  This allows the path of the slave to be derived when
opening the slave through TIOCGPTPEER instead of requiring the path to
the slave be cached.  Thus removing the need for caching the path.

A new function devpts_ptmx_path is factored out of devpts_acquire and
used to implement a function devpts_mntget.   The new function devpts_mntget
takes a filp to perform the lookup on and fsi so that it can confirm
that the superblock that is found by devpts_ptmx_path is the proper superblock.

v2: Lots of fixes to make the code actually work
v3: Suggestions by Linus
    - Removed the unnecessary initialization of filp in ptm_open_peer
    - Simplified devpts_ptmx_path as gotos are no longer required

[ This is the fix for the issue that was reverted in commit
  37388839959c, but this time without breaking 'pbuilder' due to
  increased reference counts   - Linus ]

Fixes: c6b58d7828e4 ("tty: add TIOCGPTPEER ioctl")
Reported-by: Christian Brauner <christian.brauner@canonical.com>
Reported-and-tested-by: Stefan Lippers-Hollmann <s.l-h@gmx.de>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/tty/pty.c
drivers/tty/tty_io.c
fs/devpts/inode.c
include/linux/devpts_fs.h