linux-uconsole/drivers/net/usb
Sebastian Siewior 68294b023f net/usbnet: avoid recursive locking in usbnet_stop()
commit 4231d47e6f upstream.

|kernel BUG at kernel/rtmutex.c:724!
|[<c029599c>] (rt_spin_lock_slowlock+0x108/0x2bc) from [<c01c2330>] (defer_bh+0x1c/0xb4)
|[<c01c2330>] (defer_bh+0x1c/0xb4) from [<c01c3afc>] (rx_complete+0x14c/0x194)
|[<c01c3afc>] (rx_complete+0x14c/0x194) from [<c01cac88>] (usb_hcd_giveback_urb+0xa0/0xf0)
|[<c01cac88>] (usb_hcd_giveback_urb+0xa0/0xf0) from [<c01e1ff4>] (musb_giveback+0x34/0x40)
|[<c01e1ff4>] (musb_giveback+0x34/0x40) from [<c01e2b1c>] (musb_advance_schedule+0xb4/0x1c0)
|[<c01e2b1c>] (musb_advance_schedule+0xb4/0x1c0) from [<c01e2ca8>] (musb_cleanup_urb.isra.9+0x80/0x8c)
|[<c01e2ca8>] (musb_cleanup_urb.isra.9+0x80/0x8c) from [<c01e2ed0>] (musb_urb_dequeue+0xec/0x108)
|[<c01e2ed0>] (musb_urb_dequeue+0xec/0x108) from [<c01cbb90>] (unlink1+0xbc/0xcc)
|[<c01cbb90>] (unlink1+0xbc/0xcc) from [<c01cc2ec>] (usb_hcd_unlink_urb+0x54/0xa8)
|[<c01cc2ec>] (usb_hcd_unlink_urb+0x54/0xa8) from [<c01c2a84>] (unlink_urbs.isra.17+0x2c/0x58)
|[<c01c2a84>] (unlink_urbs.isra.17+0x2c/0x58) from [<c01c2b44>] (usbnet_terminate_urbs+0x94/0x10c)
|[<c01c2b44>] (usbnet_terminate_urbs+0x94/0x10c) from [<c01c2d68>] (usbnet_stop+0x100/0x15c)
|[<c01c2d68>] (usbnet_stop+0x100/0x15c) from [<c020f718>] (__dev_close_many+0x94/0xc8)

defer_bh() takes the lock which is hold during unlink_urbs(). The safe
walk suggest that the skb will be removed from the list and this is done
by defer_bh() so it seems to be okay to drop the lock here.

Reported-by: Aníbal Almeida Pinto <anibal.pinto@efacec.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Acked-by: Oliver Neukum <oliver@neukum.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-03-12 10:33:01 -07:00
..
asix.c asix: fix infinite loop in rx_fixup() 2012-01-12 11:35:43 -08:00
catc.c drivers/net/usb/catc.c: Fix potential deadlock in catc_ctrl_run() 2011-05-31 15:30:17 -07:00
cdc-phonet.c NET: cdc-phonet, handle empty phonet header 2011-03-14 15:24:18 -07:00
cdc_eem.c Merge branch 'for-linus2' of git://git.profusion.mobi/users/lucas/linux-2.6 2011-04-07 11:14:49 -07:00
cdc_ether.c Move Logitech Harmony 900 from cdc_ether to zaurus 2012-03-12 10:32:55 -07:00
cdc_ncm.c usbnet/cdc_ncm: Don't use stack variables for DMA 2011-11-11 09:36:37 -08:00
cdc_subset.c usbnet: use eth%d name for known ethernet devices 2011-04-01 20:12:02 -07:00
cx82310_eth.c cx82310_eth: allow empty URBs 2010-09-13 20:02:53 -07:00
dm9601.c ethtool: Call ethtool's get/set_settings callbacks with cleaned data 2011-04-29 14:01:30 -07:00
gl620a.c usbnet: use eth%d name for known ethernet devices 2011-04-01 20:12:02 -07:00
hso.c hso: fix a use after free condition 2011-07-08 09:07:59 -07:00
int51x1.c
ipheth.c ipheth: Add iPhone 4S 2012-02-29 16:33:41 -08:00
kalmia.c net/usb/kalmia: signedness bug in kalmia_bind() 2011-06-23 03:15:39 -07:00
kaweth.c Fix common misspellings 2011-03-31 11:26:23 -03:00
Kconfig net/usb: Add Samsung Kalmia driver for Samsung GT-B3730 2011-06-16 21:57:49 -04:00
lg-vl600.c net/usb: Ethernet quirks for the LG-VL600 4G modem 2011-03-30 02:35:08 -07:00
Makefile net/usb: Add Samsung Kalmia driver for Samsung GT-B3730 2011-06-16 21:57:49 -04:00
mcs7830.c USB: mcs7830: return negative if auto negotiate fails 2010-12-23 10:21:12 -08:00
net1080.c usbnet: use eth%d name for known ethernet devices 2011-04-01 20:12:02 -07:00
pegasus.c drivers/net/usb: Remove unnecessary casts of netdev_priv 2010-11-17 10:36:52 -08:00
pegasus.h
plusb.c usb: plusb: Add debug to reset function 2011-04-10 18:46:45 -07:00
rndis_host.c rndis_host: Quirky devices are still 'point-to-point' 2011-04-14 23:23:45 -07:00
rtl8150.c rtl8150: rtl8150_disconnect(...) does not need tasklet_disable(...) 2011-11-11 09:36:35 -08:00
sierra_net.c drivers/net: don't use flush_scheduled_work() 2010-12-12 16:45:14 +01:00
smsc75xx.c ethtool: Call ethtool's get/set_settings callbacks with cleaned data 2011-04-29 14:01:30 -07:00
smsc75xx.h
smsc95xx.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2011-05-05 14:59:02 -07:00
smsc95xx.h
usbnet.c net/usbnet: avoid recursive locking in usbnet_stop() 2012-03-12 10:33:01 -07:00
zaurus.c Move Logitech Harmony 900 from cdc_ether to zaurus 2012-03-12 10:32:55 -07:00