aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Hovold2020-10-25 12:45:51 -0500
committerGreg Kroah-Hartman2020-12-29 06:47:07 -0600
commit50e624f536815d54677a7f71730b23917f452570 (patch)
tree4bacc459886b44e5aec739684cd52eb3beaa36b3
parent27d7769667a28e21477881a0839adb00e9859f34 (diff)
downloadkernel-50e624f536815d54677a7f71730b23917f452570.tar.gz
kernel-50e624f536815d54677a7f71730b23917f452570.tar.xz
kernel-50e624f536815d54677a7f71730b23917f452570.zip
USB: serial: keyspan_pda: fix tx-unthrottle use-after-free
commit 49fbb8e37a961396a5b6c82937c70df91de45e9d upstream. The driver's transmit-unthrottle work was never flushed on disconnect, something which could lead to the driver port data being freed while the unthrottle work is still scheduled. Fix this by cancelling the unthrottle work when shutting down the port. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Cc: stable@vger.kernel.org Acked-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Johan Hovold <johan@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/serial/keyspan_pda.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
index dde2fbb51b61..0d3ab28da06c 100644
--- a/drivers/usb/serial/keyspan_pda.c
+++ b/drivers/usb/serial/keyspan_pda.c
@@ -651,8 +651,12 @@ error:
651} 651}
652static void keyspan_pda_close(struct usb_serial_port *port) 652static void keyspan_pda_close(struct usb_serial_port *port)
653{ 653{
654 struct keyspan_pda_private *priv = usb_get_serial_port_data(port);
655
654 usb_kill_urb(port->write_urb); 656 usb_kill_urb(port->write_urb);
655 usb_kill_urb(port->interrupt_in_urb); 657 usb_kill_urb(port->interrupt_in_urb);
658
659 cancel_work_sync(&priv->unthrottle_work);
656} 660}
657 661
658 662