#22283: Kernel Oops when delivering skb from IPv4 to transport layer
-----------------------+--------------------------------
 Reporter:  anonymous  |      Owner:  developers
     Type:  defect     |     Status:  new
 Priority:  normal     |  Milestone:
Component:  packages   |    Version:  Chaos Calmer 15.05
 Keywords:             |
-----------------------+--------------------------------
 A similar setup to #22265 but with a second bridge br-lanbackup. The br-
 ssid1 ssid also contains an AP interface and a vlan over a bat0 device.

 The eth1 interface is switching from eth1 to br-lanbackup when it goes
 down and to br-ssid1 when it goes up again (and a DHCP REQUEST is received
 - but just ignore that for now). The stacktrace created is:

 {{{
 CPU 0 Unable to handle kernel paging request at virtual address 00000000,
 epc == 00000000, ra == 8018c50c
 Oops[#1]:
 CPU: 0 PID: 1072 Comm: sysctl Tainted: P               3.18.8 #1
 task: 879c3548 ti: 86bbc000 task.ti: 86bbc000
 $ 0   : 00000000 00000001 00000000 fffffffe
 $ 4   : 86a30480 86b3b831 00000001 00000000
 $ 8   : c7eb9975 80064f28 86a30540 00000000
 $12   : 00000000 00000000 00000000 00000000
 $16   : 86a30480 867fc050 80359178 86b3b000
 $20   : 00000000 00000800 8034d148 8034d140
 $24   : 00000000 76eb7d20
 $28   : 86bbc000 86bbdc10 00000000 8018c50c
 Hi    : 0000040b
 Lo    : a3656800
 epc   : 00000000   (null)
     Tainted: P
 ra    : 8018c50c ip_rcv_finish+0x348/0x3b8
 Status: 1100fc03 KERNEL EXL IE
 Cause : 00800008
 BadVA : 00000000
 PrId  : 00019750 (MIPS 74Kc)
 [...]
 Stack : 8034d864 80000000 86a30480 867fc050 80359178 86b3b000 86a30480
 867fc050
         80359178 86b3b000 00000000 8018c118 8008896c 800e598c 86a30780
 8008896c
         00000000 8018c1c4 80000000 86b3b000 00000000 8034e588 8034d134
 86a30480
         86b3b000 800a26d0 86bbdce0 801e0b8c 87a5c000 800e595c 8034d148
 86b3b000
         801dbb6c 80113038 86a30480 86a30480 86b3b420 867fc042 867e0200
 80360bf0
         ...
 Call Trace:
 [<8018c118>] ip_rcv+0x3b4/0x460
 [<8008896c>] __br_forward+0x0/0xdc
 [<800e598c>] br_forward_finish+0x30/0x7c
 [<8008896c>] __br_forward+0x0/0xdc
 [<8018c1c4>] ip_rcv_finish+0x0/0x3b8
 [<800a26d0>] __netif_receive_skb_core+0x630/0x6b0
 [<801e0b8c>] nf_iterate+0x88/0xe0
 [<800e595c>] br_forward_finish+0x0/0x7c
 [<801dbb6c>] netif_receive_skb+0x0/0x1c
 [<80113038>] deliver_clone+0x50/0x6c
 [<800e5b90>] br_handle_frame+0x0/0x2e8
 [<800a2048>] __netif_receive_skb+0x28/0x80
 [<801247a4>] do_dentry_open.isra.15+0x54/0x334
 [<801dbbe8>] netif_receive_skb_internal+0x60/0x70
 [<801dbb6c>] netif_receive_skb+0x0/0x1c
 [<801dbb7c>] netif_receive_skb+0x10/0x1c
 [<800e5b90>] br_handle_frame+0x0/0x2e8
 [<800e61c0>] br_handle_frame_finish+0x348/0x404
 [<800e5e78>] br_handle_frame_finish+0x0/0x404
 [<801dbb6c>] netif_receive_skb+0x0/0x1c
 [<800e5dfc>] br_handle_frame+0x26c/0x2e8
 [<8684d0e0>] 0x8684d0e0
 [<800e5e78>] br_handle_frame_finish+0x0/0x404
 [<800a255c>] __netif_receive_skb_core+0x4bc/0x6b0
 [<801f0de0>] pagecache_get_page+0x5c/0x244
 [<800a2048>] __netif_receive_skb+0x28/0x80
 [<801adb28>] kmem_cache_alloc+0x3c/0xec
 [<801f5428>] path_openat+0x218/0x57c
 [<801dbbe8>] netif_receive_skb_internal+0x60/0x70
 [<800f25dc>] build_skb+0x44/0xd4
 [<801dbb7c>] netif_receive_skb+0x10/0x1c
 [<879d0954>] 0x879d0954
 [<801d9904>] net_rx_action+0x10c/0x1dc
 [<80090460>] __do_softirq+0xf8/0x230
 [<801939b8>] irq_exit+0x54/0x78
 [<80122174>] do_IRQ+0x24/0x34
 [<80074ad4>] SyS_ioctl+0x50/0x94
 [<8020c148>] plat_irq_dispatch+0x4c/0x9c
 [<80060830>] ret_from_irq+0x0/0x4
 }}}

 The stacktrace was generated with a kernel that was modified to be
 compiled with less optimizations to create a readable calltrace (otherwise
 most of it would be optimized out and not part of the stack)

 {{{
 KBUILD_CFLAGS   += -fno-optimize-sibling-calls
 }}}

 The jump to NULL happens in ip_rcv_finish -> dst_input because input is
 NULL in

 {{{
 static inline int dst_input(struct sk_buff *skb)
 {
         return skb_dst(skb)->input(skb);
 }
 }}}

 This crash could not be reproduced again when the patch
 050-backport_netfilter_rtcache.patch was removed.

--
Ticket URL: <https://dev.openwrt.org/ticket/22283>
OpenWrt <http://openwrt.org>
Opensource Wireless Router Technology
_______________________________________________
openwrt-tickets mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-tickets

Reply via email to