Bluetooth: Purge the dlc->tx_queue to avoid circular dependency
authorGianluca Anzolin <gianluca@sottospazio.it>
Mon, 29 Jul 2013 15:08:13 +0000 (17:08 +0200)
committerGustavo Padovan <gustavo.padovan@collabora.co.uk>
Wed, 21 Aug 2013 14:47:08 +0000 (16:47 +0200)
In rfcomm_tty_cleanup we purge the dlc->tx_queue which may contain
socket buffers referencing the tty_port and thus preventing the tty_port
destruction.

Signed-off-by: Gianluca Anzolin <gianluca@sottospazio.it>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
net/bluetooth/rfcomm/tty.c

index 3e078b73cc225b2f39a5bd8a3d27af16aa6e3b4b..6d126faf145fe5107fbd0dfd9b810671c34e1e66 100644 (file)
@@ -668,6 +668,12 @@ static void rfcomm_tty_cleanup(struct tty_struct *tty)
        tty->driver_data = NULL;
        rfcomm_dlc_unlock(dev->dlc);
 
+       /*
+        * purge the dlc->tx_queue to avoid circular dependencies
+        * between dev and dlc
+        */
+       skb_queue_purge(&dev->dlc->tx_queue);
+
        tty_port_put(&dev->port);
 }