ppp: pppopns: Always linearize in the input path
The receive path always assumes that linear skbs would be received
in the input path and tries to de-reference the linear sections
without checking for non-linear skbs.
This can result in some unexpected behavior such as connection
failures over pptp vpns or the following error-
105.926646: <6> kernel BUG at include/linux/skbuff.h:2107!
105.926662: <6> Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
105.927125: <2> Call trace:
105.927132: <2> skb_pull+0x38/0x40
105.927150: <2> __sk_receive_skb+0x10c/0x228
105.927155: <2> pppopns_recv+0x4c/0x70
105.927161: <2> __sock_queue_rcv_skb+0x258/0x2b0
105.927166: <2> sock_queue_rcv_skb+0x2c/0x38
105.927177: <2> raw_rcv+0x10c/0x158
105.927183: <2> raw_local_deliver+0x1f0/0x3a0
105.927191: <2> ip_protocol_deliver_rcu+0x2c/0x1d0
105.927195: <2> ip_local_deliver+0x104/0x140
105.927201: <2> ip_rcv_finish+0x214/0x2e0
105.927206: <2> ip_rcv+0x2dc/0x388
105.927215: <2> __netif_receive_skb_core+0x9d8/0xb98
105.927221: <2> process_backlog+0x14c/0x278
105.927228: <2> net_rx_action+0x114/0x470
105.927238: <2> __do_softirq+0x1f8/0x3ac
105.927247: <2> irq_exit+0xd0/0xe0
105.927256: <2> handle_IPI+0x188/0x2a0
105.927260: <2> gic_handle_irq+0x130/0x1c0
105.927265: <2> el1_irq+0xb0/0x124
105.927274: <2> lpm_cpuidle_enter+0x508/0x548
105.927283: <2> cpuidle_enter_state+0x1cc/0x350
105.927291: <2> cpuidle_enter+0x18/0x20
105.927300: <2> do_idle+0x174/0x268
105.927305: <2> cpu_startup_entry+0x20/0x28
105.927312: <2> secondary_start_kernel+0x12c/0x138
Fix this by unconditionally linearizing the incoming packets.
CRs-Fixed: 2525316
Change-Id: Ib9d67cace7ffec418bd2f1737198b0fb84b37c9f
Signed-off-by:
Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Loading
Please register or sign in to comment