linux/drivers/net/wireless
Andrea Merello 2c4db12ec4 rt2800usb: Don't perform DMA from stack
Function rt2800usb_autorun_detect() passes the address of a variable
allocated onto the stack to be used for DMA by the USB layer. This has
been caught by my debugging-enabled kernel.

This patch change things in order to allocate that variable via
kmalloc, and it adjusts things to handle the kmalloc failure case,
propagating the error.

[ 7363.238852] ------------[ cut here ]------------
[ 7363.243529] WARNING: CPU: 1 PID: 5235 at lib/dma-debug.c:1153 check_for_stack+0xa4/0xf0()
[ 7363.251759] ehci-pci 0000:00:04.1: DMA-API: device driver maps memory fromstack [addr=ffff88006b81bad4]
[ 7363.261210] Modules linked in: rt2800usb(O+) rt2800lib(O) rt2x00usb(O) rt2x00lib(O) rtl818x_pci(O) rtl8187 led_class eeprom_93cx6 mac80211 cfg80211 [last unloaded: rt2x00lib]
[ 7363.277143] CPU: 1 PID: 5235 Comm: systemd-udevd Tainted: G           O  3.16.0-rc3-wl+ #31
[ 7363.285546] Hardware name: System manufacturer System Product Name/M3N78 PRO, BIOS ASUS M3N78 PRO ACPI BIOS Revision 1402 12/04/2009
[ 7363.297511]  0000000000000009 ffff88006b81b710 ffffffff8175dcad ffff88006b81b758
[ 7363.305062]  ffff88006b81b748 ffffffff8106d372 ffff88006cf10098 ffff88006cead6a0
[ 7363.312622]  ffff88006b81bad4 ffffffff81c1e7c0 ffff88006cf10098 ffff88006b81b7a8
[ 7363.320161] Call Trace:
[ 7363.322661]  [<ffffffff8175dcad>] dump_stack+0x4d/0x6f
[ 7363.327847]  [<ffffffff8106d372>] warn_slowpath_common+0x82/0xb0
[ 7363.333893]  [<ffffffff8106d3e7>] warn_slowpath_fmt+0x47/0x50
[ 7363.339686]  [<ffffffff813a93b4>] check_for_stack+0xa4/0xf0
[ 7363.345298]  [<ffffffff813a995c>] debug_dma_map_page+0x10c/0x150
[ 7363.351367]  [<ffffffff81521bd9>] usb_hcd_map_urb_for_dma+0x229/0x720
[ 7363.357890]  [<ffffffff8152256d>] usb_hcd_submit_urb+0x2fd/0x930
[ 7363.363929]  [<ffffffff810eac31>] ? irq_work_queue+0x71/0xd0
[ 7363.369617]  [<ffffffff810ab5a7>] ? wake_up_klogd+0x37/0x50
[ 7363.375219]  [<ffffffff810ab7a5>] ? console_unlock+0x1e5/0x420
[ 7363.381081]  [<ffffffff810abc25>] ? vprintk_emit+0x245/0x530
[ 7363.386773]  [<ffffffff81523d3c>] usb_submit_urb+0x30c/0x580
[ 7363.392462]  [<ffffffff81524295>] usb_start_wait_urb+0x65/0xf0
[ 7363.398325]  [<ffffffff815243ed>] usb_control_msg+0xcd/0x110
[ 7363.404014]  [<ffffffffa005514d>] rt2x00usb_vendor_request+0xbd/0x170 [rt2x00usb]
[ 7363.411544]  [<ffffffffa0074292>] rt2800usb_autorun_detect+0x32/0x50 [rt2800usb]
[ 7363.418986]  [<ffffffffa0074aa1>] rt2800usb_read_eeprom+0x11/0x70 [rt2800usb]
[ 7363.426168]  [<ffffffffa0063ffd>] rt2800_probe_hw+0x11d/0xf90 [rt2800lib]
[ 7363.432989]  [<ffffffffa0074b7d>] rt2800usb_probe_hw+0xd/0x50 [rt2800usb]
[ 7363.439808]  [<ffffffffa00453d8>] rt2x00lib_probe_dev+0x238/0x7c0 [rt2x00lib]
[ 7363.446992]  [<ffffffffa00bfa48>] ? ieee80211_led_names+0xb8/0x100 [mac80211]
[ 7363.454156]  [<ffffffffa0056116>] rt2x00usb_probe+0x156/0x1f0 [rt2x00usb]
[ 7363.460971]  [<ffffffffa0074250>] rt2800usb_probe+0x10/0x20 [rt2800usb]
[ 7363.467616]  [<ffffffff8152799e>] usb_probe_interface+0xce/0x1c0
[ 7363.473651]  [<ffffffff81480c20>] really_probe+0x70/0x240
[ 7363.479079]  [<ffffffff81480f01>] __driver_attach+0xa1/0xb0
[ 7363.484682]  [<ffffffff81480e60>] ? __device_attach+0x70/0x70
[ 7363.490461]  [<ffffffff8147eef3>] bus_for_each_dev+0x63/0xa0
[ 7363.496146]  [<ffffffff814807c9>] driver_attach+0x19/0x20
[ 7363.501570]  [<ffffffff81480468>] bus_add_driver+0x178/0x220
[ 7363.507270]  [<ffffffff8148151b>] driver_register+0x5b/0xe0
[ 7363.512874]  [<ffffffff815271b0>] usb_register_driver+0xa0/0x170
[ 7363.518905]  [<ffffffffa007a000>] ? 0xffffffffa0079fff
[ 7363.524074]  [<ffffffffa007a01e>] rt2800usb_driver_init+0x1e/0x20 [rt2800usb]
[ 7363.531247]  [<ffffffff810002d4>] do_one_initcall+0x84/0x1b0
[ 7363.536932]  [<ffffffff8113aa60>] ? kfree+0xd0/0x110
[ 7363.541931]  [<ffffffff8112730a>] ? __vunmap+0xaa/0xf0
[ 7363.547538]  [<ffffffff810ca07e>] load_module+0x1aee/0x2040
[ 7363.553141]  [<ffffffff810c6f10>] ? store_uevent+0x50/0x50
[ 7363.558676]  [<ffffffff810ca66e>] SyS_init_module+0x9e/0xc0
[ 7363.564285]  [<ffffffff81764012>] system_call_fastpath+0x16/0x1b
[ 7363.570338] ---[ end trace 01ef5f822bea9882 ]---

Signed-off-by: Andrea Merello <andrea.merello@gmail.com>
Acked-by: Helmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2014-07-07 15:04:34 -04:00
..
ath Merge branch 'ath-current' of git://github.com/kvalo/ath 2014-06-26 11:39:36 -04:00
b43 b43: fix frequency reported on G-PHY with /new/ firmware 2014-06-17 14:11:16 -04:00
b43legacy net: Replace min macro with min_t 2014-03-03 15:35:54 -05:00
brcm80211 brcmfmac: assign chip id and rev in bus interface after brcmf_usb_dlneeded 2014-06-25 14:30:29 -04:00
cw1200 Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next 2014-04-30 12:04:27 -04:00
hostap net: get rid of SET_ETHTOOL_OPS 2014-05-13 17:43:20 -04:00
ipw2x00 net: Replace min macro with min_t 2014-03-03 15:35:54 -05:00
iwlegacy iwlegacy: Convert /n to \n 2014-04-30 12:08:17 -04:00
iwlwifi iwlwifi: mvm: disable CTS to Self 2014-07-03 20:55:18 +03:00
libertas libertas: fix return value when processing invalid packet 2014-05-22 14:04:36 -04:00
libertas_tf
mwifiex mwifiex: initialize Tx/Rx info of a packet correctly 2014-07-03 14:29:21 -04:00
orinoco Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2014-06-12 14:27:40 -07:00
p54 mac80211: add vif to flush call 2014-04-09 10:55:29 +02:00
prism54 net: Replace min macro with min_t 2014-03-03 15:35:54 -05:00
rsi Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2014-06-12 14:27:40 -07:00
rt2x00 rt2800usb: Don't perform DMA from stack 2014-07-07 15:04:34 -04:00
rtl818x rtl8187: make CTS-to-self protection work 2014-05-07 16:08:09 -04:00
rtlwifi rtlwifi: rtl8192cu: remove check for CONFIG_AUTOSUSPEND 2014-05-29 13:10:39 -04:00
ti Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2014-06-12 14:27:40 -07:00
zd1211rw
adm8211.c
adm8211.h
airo_cs.c
airo.c airo: replace function ieee80211_{dsss_chan_to_freq, freq_to_dsss_chan} 2014-02-28 14:11:13 -05:00
airo.h
at76c50x-usb.c at76c50x: fix scan does not work with latest mac80211 2014-06-05 14:15:08 -04:00
at76c50x-usb.h at76c50x: fix scan does not work with latest mac80211 2014-06-05 14:15:08 -04:00
atmel_cs.c
atmel_pci.c
atmel.c atmel: replace function ieee80211_{dsss_chan_to_freq, freq_to_dsss_chan} 2014-02-28 14:11:13 -05:00
atmel.h
Kconfig rsi: Add RS9113 wireless driver 2014-03-17 13:51:52 -04:00
mac80211_hwsim.c mac80211_hwsim: Advertise support for AP mode channel width changes 2014-04-28 18:11:59 +02:00
mac80211_hwsim.h mac80211_hwsim: allow creation of single-channel radios with chanctx 2014-02-11 13:10:02 +01:00
Makefile rsi: Add RS9113 wireless driver 2014-03-17 13:51:52 -04:00
mwl8k.c mwl8k: mwl8k_update_survey can be static 2014-03-06 14:29:58 -05:00
ray_cs.c ray_cs: replace del_timer by del_timer_sync 2014-04-22 15:06:28 -04:00
ray_cs.h
rayctl.h
rndis_wlan.c cfg80211: constify MAC addresses in cfg80211 ops 2014-05-19 17:34:42 +02:00
wl3501_cs.c wl3501_cs: replace function ieee80211_{dsss_chan_to_freq, freq_to_dsss_chan} 2014-02-28 14:12:36 -05:00
wl3501.h
zd1201.c zd1201: replace function ieee80211_{dsss_chan_to_freq, freq_to_dsss_chan} 2014-02-28 14:12:36 -05:00
zd1201.h