X-Git-Url: https://git.archive.openwrt.org/?p=openwrt.git;a=blobdiff_plain;f=package%2Fkernel%2Fmac80211%2Fpatches%2F350-0002-brcmfmac-add-eth_type_trans-back-for-PCIe-full-dongl.patch;fp=package%2Fkernel%2Fmac80211%2Fpatches%2F350-0002-brcmfmac-add-eth_type_trans-back-for-PCIe-full-dongl.patch;h=db8112d399c19296612d30126d94ff6b4c880cd3;hp=0000000000000000000000000000000000000000;hb=104549a1b6cb24f16942a1f448e1a3bc3624bab7;hpb=484ecf816460f58fe589565ac88014f369db86ee diff --git a/package/kernel/mac80211/patches/350-0002-brcmfmac-add-eth_type_trans-back-for-PCIe-full-dongl.patch b/package/kernel/mac80211/patches/350-0002-brcmfmac-add-eth_type_trans-back-for-PCIe-full-dongl.patch new file mode 100644 index 0000000000..db8112d399 --- /dev/null +++ b/package/kernel/mac80211/patches/350-0002-brcmfmac-add-eth_type_trans-back-for-PCIe-full-dongl.patch @@ -0,0 +1,87 @@ +From: Franky Lin +Date: Thu, 2 Jun 2016 02:00:27 -0700 +Subject: [PATCH] brcmfmac: add eth_type_trans back for PCIe full dongle + +A regression was introduced in commit 9c349892ccc9 ("brcmfmac: revise +handling events in receive path") which moves eth_type_trans() call +to brcmf_rx_frame(). Msgbuf layer doesn't use brcmf_rx_frame() but invokes +brcmf_netif_rx() directly. In such case the Ethernet header was not +stripped out resulting in null pointer dereference in the networking +stack. + +BUG: unable to handle kernel NULL pointer dereference at 0000000000000048 +IP: [] enqueue_to_backlog+0x56/0x260 +PGD 0 +Oops: 0000 [#1] PREEMPT SMP +Modules linked in: fuse ipt_MASQUERADE nf_nat_masquerade_ipv4 +iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 xt_addrtype +[...] +rtsx_pci scsi_mod usbcore usb_common i8042 serio nvme nvme_core +CPU: 7 PID: 1340 Comm: irq/136-brcmf_p Not tainted 4.7.0-rc1-mainline #1 +Hardware name: Dell Inc. XPS 15 9550/0N7TVV, BIOS 01.02.00 04/07/2016 +task: ffff8804a0c5bd00 ti: ffff88049e124000 task.ti: ffff88049e124000 +RIP: 0010:[] [] +enqueue_to_backlog+0x56/0x260 +RSP: 0018:ffff88049e127ca0 EFLAGS: 00010046 +RAX: 0000000000000000 RBX: ffff8804bddd7c40 RCX: 000000000000002f +RDX: 0000000000000000 RSI: 0000000000000007 RDI: ffff8804bddd7d4c +RBP: ffff88049e127ce8 R08: 0000000000000000 R09: 0000000000000000 +R10: ffff8804bddd12c0 R11: 000000000000149e R12: 0000000000017c40 +R13: ffff88049e127d08 R14: ffff8804a9bd6d00 R15: ffff8804bddd7d4c +FS: 0000000000000000(0000) GS:ffff8804bddc0000(0000) knlGS:0000000000000000 +CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 +CR2: 0000000000000048 CR3: 0000000001806000 CR4: 00000000003406e0 +DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 +DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 +Stack: +ffff8804bdddad00 ffff8804ad089e00 0000000000000000 0000000000000282 +0000000000000000 ffff8804a9bd6d00 ffff8804a1b27e00 ffff8804a9bd6d00 +ffff88002ee88000 ffff88049e127d28 ffffffff814c3f3b ffffffff81311fc3 +Call Trace: +[] netif_rx_internal+0x4b/0x170 +[] ? swiotlb_tbl_unmap_single+0xf3/0x120 +[] netif_rx_ni+0x27/0xc0 +[] brcmf_netif_rx+0x49/0x70 [brcmfmac] +[] brcmf_msgbuf_process_rx+0x2b4/0x570 [brcmfmac] +[] ? __xen_set_pgd_hyper+0x57/0xd0 +[] ? irq_forced_thread_fn+0x70/0x70 +[] brcmf_proto_msgbuf_rx_trigger+0x31/0xe0 [brcmfmac] +[] brcmf_pcie_isr_thread+0x7f/0x110 [brcmfmac] +[] irq_thread_fn+0x20/0x50 +[] irq_thread+0x12d/0x1c0 +[] ? __schedule+0x2f5/0x7a0 +[] ? wake_threads_waitq+0x30/0x30 +[] ? irq_thread_dtor+0xb0/0xb0 +[] kthread+0xd8/0xf0 +[] ret_from_fork+0x1f/0x40 +[] ? kthread_worker_fn+0x170/0x170 +Code: 1c f5 60 9a 8e 81 9c 58 0f 1f 44 00 00 48 89 45 d0 fa 66 0f 1f +44 00 00 4c 8d bb 0c 01 00 00 4c 89 ff e8 5e 08 11 00 49 8b 56 20 <48> +8b 52 48 83 e2 01 74 10 8b 8b 08 01 00 00 8b 15 59 c5 42 00 +RIP [] enqueue_to_backlog+0x56/0x260 +RSP +CR2: 0000000000000048 + +Fixes: 9c349892ccc9 ("brcmfmac: revise handling events in receive path") +Reported-by: Rafal Milecki +Reported-by: Grey Christoforo +Reviewed-by: Pieter-Paul Giesberts +Reviewed-by: Arend Van Spriel +Reviewed-by: Hante Meuleman +Signed-off-by: Franky Lin +[arend@broadcom.com: rephrased the commit message] +Signed-off-by: Arend van Spriel +Signed-off-by: Kalle Valo +--- + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c +@@ -1157,6 +1157,8 @@ brcmf_msgbuf_process_rx_complete(struct + brcmu_pkt_buf_free_skb(skb); + return; + } ++ ++ skb->protocol = eth_type_trans(skb, ifp->ndev); + brcmf_netif_rx(ifp, skb); + } +