linux/drivers/net/usb
Marc Zyngier 3c0f3c605b NET: smsc95xx: don't use stack for async writes to the device
The set_multicast operation performs asynchronous writes to the
device, with some addresses pointing to the stack. Bad things may
happen, and this is trapped CONFIG_DMA_API_DEBUG:

[    5.237762] WARNING: at /build/buildd/linux-linaro-omap-2.6.38/lib/dma-debug.c:867 check_for_stack+0xd4/0x100()
[    5.237792] ehci-omap ehci-omap.0: DMA-API: device driver maps memory fromstack [addr=d9c77dec]
[    5.237792] Modules linked in: smsc95xx(+) usbnet twl6030_usb twl4030_pwrbutton leds_gpio omap_wdt omap2_mcspi
[    5.237854] [<c006d618>] (unwind_backtrace+0x0/0xf8) from [<c00a6a14>] (warn_slowpath_common+0x54/0x64)
[    5.237884] [<c00a6a14>] (warn_slowpath_common+0x54/0x64) from [<c00a6ab8>] (warn_slowpath_fmt+0x30/0x40)
[    5.237915] [<c00a6ab8>] (warn_slowpath_fmt+0x30/0x40) from [<c034e9d8>] (check_for_stack+0xd4/0x100)
[    5.237915] [<c034e9d8>] (check_for_stack+0xd4/0x100) from [<c034fea8>] (debug_dma_map_page+0xb4/0xdc)
[    5.237976] [<c034fea8>] (debug_dma_map_page+0xb4/0xdc) from [<c04242f0>] (map_urb_for_dma+0x26c/0x304)
[    5.237976] [<c04242f0>] (map_urb_for_dma+0x26c/0x304) from [<c0424594>] (usb_hcd_submit_urb+0x78/0x19c)
[    5.238037] [<c0424594>] (usb_hcd_submit_urb+0x78/0x19c) from [<bf049c5c>] (smsc95xx_write_reg_async+0xb4/0x130 [smsc95xx])
[    5.238067] [<bf049c5c>] (smsc95xx_write_reg_async+0xb4/0x130 [smsc95xx]) from [<bf049dd4>] (smsc95xx_set_multicast+0xfc/0x148 [smsc95xx])
[    5.238098] [<bf049dd4>] (smsc95xx_set_multicast+0xfc/0x148 [smsc95xx]) from [<bf04a118>] (smsc95xx_reset+0x2f8/0x68c [smsc95xx])
[    5.238128] [<bf04a118>] (smsc95xx_reset+0x2f8/0x68c [smsc95xx]) from [<bf04a8cc>] (smsc95xx_bind+0xcc/0x188 [smsc95xx])
[    5.238159] [<bf04a8cc>] (smsc95xx_bind+0xcc/0x188 [smsc95xx]) from [<bf03ef1c>] (usbnet_probe+0x204/0x4c4 [usbnet])
[    5.238220] [<bf03ef1c>] (usbnet_probe+0x204/0x4c4 [usbnet]) from [<c0429078>] (usb_probe_interface+0xe4/0x1c4)
[    5.238250] [<c0429078>] (usb_probe_interface+0xe4/0x1c4) from [<c03a8770>] (really_probe+0x64/0x160)
[    5.238250] [<c03a8770>] (really_probe+0x64/0x160) from [<c03a8a30>] (driver_probe_device+0x48/0x60)
[    5.238281] [<c03a8a30>] (driver_probe_device+0x48/0x60) from [<c03a8ad4>] (__driver_attach+0x8c/0x90)
[    5.238311] [<c03a8ad4>] (__driver_attach+0x8c/0x90) from [<c03a7b24>] (bus_for_each_dev+0x50/0x7c)
[    5.238311] [<c03a7b24>] (bus_for_each_dev+0x50/0x7c) from [<c03a82ec>] (bus_add_driver+0x190/0x250)
[    5.238311] [<c03a82ec>] (bus_add_driver+0x190/0x250) from [<c03a8cf8>] (driver_register+0x78/0x13c)
[    5.238433] [<c03a8cf8>] (driver_register+0x78/0x13c) from [<c0428040>] (usb_register_driver+0x78/0x13c)
[    5.238464] [<c0428040>] (usb_register_driver+0x78/0x13c) from [<c005b680>] (do_one_initcall+0x34/0x188)
[    5.238494] [<c005b680>] (do_one_initcall+0x34/0x188) from [<c00e11f0>] (sys_init_module+0xb0/0x1c0)
[    5.238525] [<c00e11f0>] (sys_init_module+0xb0/0x1c0) from [<c0065c40>] (ret_fast_syscall+0x0/0x30)

Move the two offenders to the private structure which is kmalloc-ed,
and thus safe.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: Steve Glendinning <steve.glendinning@smsc.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2011-03-22 01:02:18 -07:00
..
Kconfig USB CDC NCM host driver 2010-12-06 12:59:03 -08:00
Makefile USB CDC NCM host driver 2010-12-06 12:59:03 -08:00
asix.c asix: add USB ID for Logitec LAN-GTJ U2A 2010-12-17 11:50:20 -08:00
catc.c
cdc-phonet.c NET: cdc-phonet, handle empty phonet header 2011-03-14 15:24:18 -07:00
cdc_eem.c
cdc_ether.c USB: cdc_ether: remove unneeded check 2010-12-31 11:11:38 -08:00
cdc_ncm.c USB CDC NCM errata updates for cdc_ncm host driver 2011-02-08 13:54:43 -08:00
cdc_subset.c
cx82310_eth.c cx82310_eth: allow empty URBs 2010-09-13 20:02:53 -07:00
dm9601.c Added support for usb ethernet (0x0fe6, 0x9700) 2011-02-23 14:32:28 -08:00
gl620a.c
hso.c Merge 2.6.38-rc6 into tty-next 2011-02-24 11:36:31 -08:00
int51x1.c
ipheth.c drivers/net/usb: Update WARN uses 2010-11-09 09:22:31 -08:00
kaweth.c USB NET KL5KUSB101: Fix mem leak in error path of kaweth_download_firmware() 2011-01-24 23:20:24 -08:00
mcs7830.c USB: mcs7830: return negative if auto negotiate fails 2010-12-23 10:21:12 -08:00
net1080.c
pegasus.c drivers/net/usb: Remove unnecessary casts of netdev_priv 2010-11-17 10:36:52 -08:00
pegasus.h
plusb.c Update broken web addresses in the kernel. 2010-10-18 11:03:14 +02:00
rndis_host.c
rtl8150.c
sierra_net.c drivers/net: don't use flush_scheduled_work() 2010-12-12 16:45:14 +01:00
smsc75xx.c
smsc75xx.h
smsc95xx.c NET: smsc95xx: don't use stack for async writes to the device 2011-03-22 01:02:18 -07:00
smsc95xx.h
usbnet.c USB Network driver infrastructure: Fix leak when usb_autopm_get_interface() returns less than zero in kevent(). 2011-02-13 11:21:15 -08:00
zaurus.c