tty: Move tty hung up check from port->lock critical section
authorPeter Hurley <peter@hurleysoftware.com>
Wed, 5 Nov 2014 17:40:03 +0000 (12:40 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 6 Nov 2014 22:57:27 +0000 (14:57 -0800)
The port->lock does not protect the filp->f_op field; move
the tty_hung_up_p() test outside the port->lock critical section
in tty_port_close_start().

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/tty_port.c

index 1b9335796da42b2c9399dd7675200fc5f1d3cae3..3b641d115fd254b5c28ee67a48eb658a79d18385 100644 (file)
@@ -473,12 +473,10 @@ int tty_port_close_start(struct tty_port *port,
 {
        unsigned long flags;
 
-       spin_lock_irqsave(&port->lock, flags);
-       if (tty_hung_up_p(filp)) {
-               spin_unlock_irqrestore(&port->lock, flags);
+       if (tty_hung_up_p(filp))
                return 0;
-       }
 
+       spin_lock_irqsave(&port->lock, flags);
        if (tty->count == 1 && port->count != 1) {
                printk(KERN_WARNING
                    "tty_port_close_start: tty->count = 1 port count = %d.\n",