Message ID | YX4CqjfRcTa6bVL+@Zekuns-MBP-16.fios-router.home (mailing list archive) |
---|---|
State | Accepted |
Commit | 04d80663f67ccef893061b49ec8a42ff7045ae84 |
Delegated to: | Kalle Valo |
Headers | show |
Series | mwifiex_usb: Fix skb_over_panic in mwifiex_usb_recv | expand |
Zekun Shen <bruceshenzk@gmail.com> writes: > Currently, with an unknown recv_type, mwifiex_usb_recv > just return -1 without restoring the skb. Next time > mwifiex_usb_rx_complete is invoked with the same skb, > calling skb_put causes skb_over_panic. > > The bug is triggerable with a compromised/malfunctioning > usb device. After applying the patch, skb_over_panic > no longer shows up with the same input. > > Attached is the panic report from fuzzing. > skbuff: skb_over_panic: text:000000003bf1b5fa > len:2048 put:4 head:00000000dd6a115b data:000000000a9445d8 > tail:0x844 end:0x840 dev:<NULL> > kernel BUG at net/core/skbuff.c:109! > invalid opcode: 0000 [#1] SMP KASAN NOPTI > CPU: 0 PID: 198 Comm: in:imklog Not tainted 5.6.0 #60 > RIP: 0010:skb_panic+0x15f/0x161 > Call Trace: > <IRQ> > ? mwifiex_usb_rx_complete+0x26b/0xfcd [mwifiex_usb] > skb_put.cold+0x24/0x24 > mwifiex_usb_rx_complete+0x26b/0xfcd [mwifiex_usb] > __usb_hcd_giveback_urb+0x1e4/0x380 > usb_giveback_urb_bh+0x241/0x4f0 > ? __hrtimer_run_queues+0x316/0x740 > ? __usb_hcd_giveback_urb+0x380/0x380 > tasklet_action_common.isra.0+0x135/0x330 > __do_softirq+0x18c/0x634 > irq_exit+0x114/0x140 > smp_apic_timer_interrupt+0xde/0x380 > apic_timer_interrupt+0xf/0x20 > </IRQ> > > Reported-by: Zekun Shen <bruceshenzk@gmail.com> You are the author, no need to have your name in Reported-by.
Zekun Shen <bruceshenzk@gmail.com> wrote: > Currently, with an unknown recv_type, mwifiex_usb_recv > just return -1 without restoring the skb. Next time > mwifiex_usb_rx_complete is invoked with the same skb, > calling skb_put causes skb_over_panic. > > The bug is triggerable with a compromised/malfunctioning > usb device. After applying the patch, skb_over_panic > no longer shows up with the same input. > > Attached is the panic report from fuzzing. > skbuff: skb_over_panic: text:000000003bf1b5fa > len:2048 put:4 head:00000000dd6a115b data:000000000a9445d8 > tail:0x844 end:0x840 dev:<NULL> > kernel BUG at net/core/skbuff.c:109! > invalid opcode: 0000 [#1] SMP KASAN NOPTI > CPU: 0 PID: 198 Comm: in:imklog Not tainted 5.6.0 #60 > RIP: 0010:skb_panic+0x15f/0x161 > Call Trace: > <IRQ> > ? mwifiex_usb_rx_complete+0x26b/0xfcd [mwifiex_usb] > skb_put.cold+0x24/0x24 > mwifiex_usb_rx_complete+0x26b/0xfcd [mwifiex_usb] > __usb_hcd_giveback_urb+0x1e4/0x380 > usb_giveback_urb_bh+0x241/0x4f0 > ? __hrtimer_run_queues+0x316/0x740 > ? __usb_hcd_giveback_urb+0x380/0x380 > tasklet_action_common.isra.0+0x135/0x330 > __do_softirq+0x18c/0x634 > irq_exit+0x114/0x140 > smp_apic_timer_interrupt+0xde/0x380 > apic_timer_interrupt+0xf/0x20 > </IRQ> > > Reported-by: Brendan Dolan-Gavitt <brendandg@nyu.edu> > Signed-off-by: Zekun Shen <bruceshenzk@gmail.com> Patch applied to wireless-drivers-next.git, thanks. 04d80663f67c mwifiex: Fix skb_over_panic in mwifiex_usb_recv()
diff --git a/drivers/net/wireless/marvell/mwifiex/usb.c b/drivers/net/wireless/marvell/mwifiex/usb.c index 426e39d4c..6d81e8786 100644 --- a/drivers/net/wireless/marvell/mwifiex/usb.c +++ b/drivers/net/wireless/marvell/mwifiex/usb.c @@ -130,7 +130,8 @@ static int mwifiex_usb_recv(struct mwifiex_adapter *adapter, default: mwifiex_dbg(adapter, ERROR, "unknown recv_type %#x\n", recv_type); - return -1; + ret = -1; + goto exit_restore_skb; } break; case MWIFIEX_USB_EP_DATA:
Currently, with an unknown recv_type, mwifiex_usb_recv just return -1 without restoring the skb. Next time mwifiex_usb_rx_complete is invoked with the same skb, calling skb_put causes skb_over_panic. The bug is triggerable with a compromised/malfunctioning usb device. After applying the patch, skb_over_panic no longer shows up with the same input. Attached is the panic report from fuzzing. skbuff: skb_over_panic: text:000000003bf1b5fa len:2048 put:4 head:00000000dd6a115b data:000000000a9445d8 tail:0x844 end:0x840 dev:<NULL> kernel BUG at net/core/skbuff.c:109! invalid opcode: 0000 [#1] SMP KASAN NOPTI CPU: 0 PID: 198 Comm: in:imklog Not tainted 5.6.0 #60 RIP: 0010:skb_panic+0x15f/0x161 Call Trace: <IRQ> ? mwifiex_usb_rx_complete+0x26b/0xfcd [mwifiex_usb] skb_put.cold+0x24/0x24 mwifiex_usb_rx_complete+0x26b/0xfcd [mwifiex_usb] __usb_hcd_giveback_urb+0x1e4/0x380 usb_giveback_urb_bh+0x241/0x4f0 ? __hrtimer_run_queues+0x316/0x740 ? __usb_hcd_giveback_urb+0x380/0x380 tasklet_action_common.isra.0+0x135/0x330 __do_softirq+0x18c/0x634 irq_exit+0x114/0x140 smp_apic_timer_interrupt+0xde/0x380 apic_timer_interrupt+0xf/0x20 </IRQ> Reported-by: Zekun Shen <bruceshenzk@gmail.com> Reported-by: Brendan Dolan-Gavitt <brendandg@nyu.edu> Signed-off-by: Zekun Shen <bruceshenzk@gmail.com> --- drivers/net/wireless/marvell/mwifiex/usb.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)