usb: gadget: u_serial: add missing port entry locking
authorMichał Mirosław <mirq-linux@rere.qmqm.pl>
Sat, 10 Aug 2019 08:42:48 +0000 (10:42 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 13 Dec 2019 07:42:20 +0000 (08:42 +0100)
commit daf82bd24e308c5a83758047aff1bd81edda4f11 upstream.

gserial_alloc_line() misses locking (for a release barrier) while
resetting port entry on TTY allocation failure. Fix this.

Cc: stable@vger.kernel.org
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Tested-by: Ladislav Michl <ladis@linux-mips.org>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/gadget/function/u_serial.c

index 65f634e..bb1e2e1 100644 (file)
@@ -1239,8 +1239,10 @@ int gserial_alloc_line(unsigned char *line_num)
                                __func__, port_num, PTR_ERR(tty_dev));
 
                ret = PTR_ERR(tty_dev);
+               mutex_lock(&ports[port_num].lock);
                port = ports[port_num].port;
                ports[port_num].port = NULL;
+               mutex_unlock(&ports[port_num].lock);
                gserial_free_port(port);
                goto err;
        }