linux-pinenote/drivers/net/wireless/brcm80211/brcmfmac
Arend van Spriel db4efbbeb4 brcmfmac: obtain platform data upon module initialization
The driver uses platform_driver_probe() to obtain platform data
if any. However, that function is placed in the .init section so
it must be called upon driver module initialization.

The problem was reported by Fenguang Wu resulting in a kernel
oops because the .init section was already freed.

[   48.966342] Switched to clocksource tsc
[   48.970002] kernel tried to execute NX-protected page - exploit attempt? (uid: 0)
[   48.970851] BUG: unable to handle kernel paging request at ffffffff82196446
[   48.970957] IP: [<ffffffff82196446>] classes_init+0x26/0x26
[   48.970957] PGD 1e76067 PUD 1e77063 PMD f388063 PTE 8000000002196163
[   48.970957] Oops: 0011 [#1]
[   48.970957] CPU: 0 PID: 17 Comm: kworker/0:1 Not tainted 3.11.0-rc7-00444-gc52dd7f #23
[   48.970957] Workqueue: events brcmf_driver_init
[   48.970957] task: ffff8800001d2000 ti: ffff8800001d4000 task.ti: ffff8800001d4000
[   48.970957] RIP: 0010:[<ffffffff82196446>]  [<ffffffff82196446>] classes_init+0x26/0x26
[   48.970957] RSP: 0000:ffff8800001d5d40  EFLAGS: 00000286
[   48.970957] RAX: 0000000000000001 RBX: ffffffff820c5620 RCX: 0000000000000000
[   48.970957] RDX: 0000000000000001 RSI: ffffffff816f7380 RDI: ffffffff820c56c0
[   48.970957] RBP: ffff8800001d5d50 R08: ffff8800001d2508 R09: 0000000000000002
[   48.970957] R10: 0000000000000000 R11: 0001f7ce298c5620 R12: ffff8800001c76b0
[   48.970957] R13: ffffffff81e91d40 R14: 0000000000000000 R15: ffff88000e0ce300
[   48.970957] FS:  0000000000000000(0000) GS:ffffffff81e84000(0000) knlGS:0000000000000000
[   48.970957] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[   48.970957] CR2: ffffffff82196446 CR3: 0000000001e75000 CR4: 00000000000006b0
[   48.970957] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[   48.970957] DR3: 0000000000000000 DR6: 0000000000000000 DR7: 0000000000000000
[   48.970957] Stack:
[   48.970957]  ffffffff816f7df8 ffffffff820c5620 ffff8800001d5d60 ffffffff816eeec9
[   48.970957]  ffff8800001d5de0 ffffffff81073dc5 ffffffff81073d68 ffff8800001d5db8
[   48.970957]  0000000000000086 ffffffff820c5620 ffffffff824f7fd0 0000000000000000
[   48.970957] Call Trace:
[   48.970957]  [<ffffffff816f7df8>] ? brcmf_sdio_init+0x18/0x70
[   48.970957]  [<ffffffff816eeec9>] brcmf_driver_init+0x9/0x10
[   48.970957]  [<ffffffff81073dc5>] process_one_work+0x1d5/0x480
[   48.970957]  [<ffffffff81073d68>] ? process_one_work+0x178/0x480
[   48.970957]  [<ffffffff81074188>] worker_thread+0x118/0x3a0
[   48.970957]  [<ffffffff81074070>] ? process_one_work+0x480/0x480
[   48.970957]  [<ffffffff8107aa17>] kthread+0xe7/0xf0
[   48.970957]  [<ffffffff810829f7>] ? finish_task_switch.constprop.57+0x37/0xd0
[   48.970957]  [<ffffffff8107a930>] ? __kthread_parkme+0x80/0x80
[   48.970957]  [<ffffffff81a6923a>] ret_from_fork+0x7a/0xb0
[   48.970957]  [<ffffffff8107a930>] ? __kthread_parkme+0x80/0x80
[   48.970957] Code: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc
cc cc cc cc cc cc <cc> cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc
[   48.970957] RIP  [<ffffffff82196446>] classes_init+0x26/0x26
[   48.970957]  RSP <ffff8800001d5d40>
[   48.970957] CR2: ffffffff82196446
[   48.970957] ---[ end trace 62980817cd525f14 ]---

Cc: <stable@vger.kernel.org> # 3.10.x, 3.11.x
Reported-by: Fengguang Wu <fengguang.wu@intel.com>
Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Tested-by: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2013-09-26 14:02:33 -04:00
..
bcmsdh.c brcmfmac: abstract tx packet processing functions 2013-08-15 16:07:55 -04:00
bcmsdh_sdmmc.c brcmfmac: obtain platform data upon module initialization 2013-09-26 14:02:33 -04:00
btcoex.c brcmfmac: support critical protocol API for DHCP 2013-04-23 14:16:52 -04:00
btcoex.h brcmfmac: support critical protocol API for DHCP 2013-04-23 14:16:52 -04:00
dhd.h brcmfmac: ignore IF event if firmware indicates it 2013-08-15 16:07:54 -04:00
dhd_bus.h brcmfmac: obtain platform data upon module initialization 2013-09-26 14:02:33 -04:00
dhd_cdc.c brcmfmac: add trace event for capturing BDC header 2013-06-12 15:06:24 -04:00
dhd_common.c brcmfmac: Turn off ARP offloading when configured for AP. 2013-05-28 13:43:08 -04:00
dhd_dbg.c PTR_RET is now PTR_ERR_OR_ZERO(): Replace most. 2013-07-15 11:25:01 +09:30
dhd_dbg.h brcmfmac: add debugfs statistics for firmware-signalling 2013-06-12 15:07:44 -04:00
dhd_linux.c brcmfmac: obtain platform data upon module initialization 2013-09-26 14:02:33 -04:00
dhd_proto.h brcmfmac: add parameter to brcmf_proto_hdrpush() for data offset 2013-03-06 16:28:50 -05:00
dhd_sdio.c brcmfmac: use configurable sdio bus header length for tx packet 2013-08-15 16:07:56 -04:00
fweh.c brcmfmac: ignore IF event if firmware indicates it 2013-08-15 16:07:54 -04:00
fweh.h brcmfmac: Only use credits for bcmc when firmware indicates it. 2013-06-18 14:46:48 -04:00
fwil.c brcmfmac: add hexadecimal trace of message payload 2013-04-08 15:28:43 -04:00
fwil.h brcmfmac: use struct brcmf_if as interface object for fwil functions 2012-10-29 15:28:27 -04:00
fwil_types.h brcmfmac: add support for manual TDLS operations 2013-08-15 16:07:54 -04:00
fwsignal.c brcmfmac: no fws locking outside fws module. 2013-08-15 16:07:53 -04:00
fwsignal.h brcmfmac: Take bus flowcontrol at credit mgmt into account. 2013-06-12 15:02:16 -04:00
Makefile brcmfmac: support critical protocol API for DHCP 2013-04-23 14:16:52 -04:00
p2p.c cfg80211: add flags to cfg80211_rx_mgmt() 2013-08-23 16:06:03 +02:00
p2p.h brcmfmac: Add tx p2p off-channel support. 2013-02-08 14:51:43 -05:00
sdio_chip.c brcmfmac: Add drive strength programming for SDIO 43143. 2013-04-12 14:27:55 -04:00
sdio_chip.h brcmfmac: add support for dongle ARM CR4 core 2013-04-12 14:27:54 -04:00
sdio_host.h brcmfmac: abstract tx packet processing functions 2013-08-15 16:07:55 -04:00
tracepoint.c brcmfmac: introduce tracepoints for message logging 2013-03-06 16:28:31 -05:00
tracepoint.h brcmfmac: add trace event for capturing BDC header 2013-06-12 15:06:24 -04:00
usb.c brcmfmac: obtain platform data upon module initialization 2013-09-26 14:02:33 -04:00
usb.h brcmfmac: usb suspend/resume. 2012-11-16 14:28:47 -05:00
usb_rdl.h brcm80211: fmac: add USB support for bcm43235/6/8 chipsets 2012-02-22 14:48:53 -05:00
wl_cfg80211.c Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next 2013-08-16 14:24:51 -04:00
wl_cfg80211.h brcmfmac: add additional parameter to brcmf_free_vif() 2013-05-28 13:43:09 -04:00