diff options
author | Gianluca Anzolin <gianluca@sottospazio.it> | 2013-07-29 17:08:13 +0200 |
---|---|---|
committer | Gustavo Padovan <gustavo.padovan@collabora.co.uk> | 2013-08-21 16:47:08 +0200 |
commit | ffe6b68cc5999a3f91a15b6667e69e14186e337d (patch) | |
tree | 4b9732f2d2ce8e6368a77d1d4b6490e3c1312c29 /net/bluetooth/rfcomm/tty.c | |
parent | ece3150dea382c7c961fe2604332ed3474960d25 (diff) | |
download | lwn-ffe6b68cc5999a3f91a15b6667e69e14186e337d.tar.gz lwn-ffe6b68cc5999a3f91a15b6667e69e14186e337d.zip |
Bluetooth: Purge the dlc->tx_queue to avoid circular dependency
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>
Diffstat (limited to 'net/bluetooth/rfcomm/tty.c')
-rw-r--r-- | net/bluetooth/rfcomm/tty.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c index 3e078b73cc22..6d126faf145f 100644 --- a/net/bluetooth/rfcomm/tty.c +++ b/net/bluetooth/rfcomm/tty.c @@ -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); } |