Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

TTY: call tty_driver_lookup_tty unconditionally

Commit 4a2b5fddd5 (Move tty lookup/reopen to caller) made the call to
tty_driver_lookup_tty conditional in tty_open. It doesn't look like it
was an intention. Or if it was, it was not documented in the changelog
and the code now looks weird. For example there would be no need to
remember the tty driver and tty index. Further the condition depends
on a tty which we drop a reference of already.

If I'm looking correctly, this should not matter thanks to the locking
currently done there. Thus, tty_driver->ttys[idx] cannot change under
our hands. But anyway, it makes sense to change that to the old
behaviour.

Introduced-in: v2.6.28-rc2
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: stable <stable@vger.kernel.org>
Cc: Sukadev Bhattiprolu <sukadev@us.ibm.com>
Cc: Alan Cox <alan@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Jiri Slaby and committed by
Greg Kroah-Hartman
631180ac 1177c0ef

+9 -12
+9 -12
drivers/tty/tty_io.c
··· 1821 1821 1822 1822 static int tty_open(struct inode *inode, struct file *filp) 1823 1823 { 1824 - struct tty_struct *tty = NULL; 1824 + struct tty_struct *tty; 1825 1825 int noctty, retval; 1826 1826 struct tty_driver *driver; 1827 1827 int index; ··· 1892 1892 return -ENODEV; 1893 1893 } 1894 1894 got_driver: 1895 - if (!tty) { 1896 - /* check whether we're reopening an existing tty */ 1897 - tty = tty_driver_lookup_tty(driver, inode, index); 1898 - 1899 - if (IS_ERR(tty)) { 1900 - tty_unlock(); 1901 - mutex_unlock(&tty_mutex); 1902 - tty_driver_kref_put(driver); 1903 - tty_free_file(filp); 1904 - return PTR_ERR(tty); 1905 - } 1895 + /* check whether we're reopening an existing tty */ 1896 + tty = tty_driver_lookup_tty(driver, inode, index); 1897 + if (IS_ERR(tty)) { 1898 + tty_unlock(); 1899 + mutex_unlock(&tty_mutex); 1900 + tty_driver_kref_put(driver); 1901 + tty_free_file(filp); 1902 + return PTR_ERR(tty); 1906 1903 } 1907 1904 1908 1905 if (tty) {