• Taehee Yoo's avatar
    net: validate lwtstate->data before returning from skb_tunnel_info() · 67a9c943
    Taehee Yoo authored
    skb_tunnel_info() returns pointer of lwtstate->data as ip_tunnel_info
    type without validation. lwtstate->data can have various types such as
    mpls_iptunnel_encap, etc and these are not compatible.
    So skb_tunnel_info() should validate before returning that pointer.
    
    Splat looks like:
    BUG: KASAN: slab-out-of-bounds in vxlan_get_route+0x418/0x4b0 [vxlan]
    Read of size 2 at addr ffff888106ec2698 by task ping/811
    
    CPU: 1 PID: 811 Comm: ping Not tainted 5.13.0+ #1195
    Call Trace:
     dump_stack_lvl+0x56/0x7b
     print_address_description.constprop.8.cold.13+0x13/0x2ee
     ? vxlan_get_route+0x418/0x4b0 [vxlan]
     ? vxlan_get_route+0x418/0x4b0 [vxlan]
     kasan_report.cold.14+0x83/0xdf
     ? vxlan_get_route+0x418/0x4b0 [vxlan]
     vxlan_get_route+0x418/0x4b0 [vxlan]
     [ ... ]
     vxlan_xmit_one+0x148b/0x32b0 [vxlan]
     [ ... ]
     vxlan_xmit+0x25c5/0x4780 [vxlan]
     [ ... ]
     dev_hard_start_xmit+0x1ae/0x6e0
     __dev_queue_xmit+0x1f39/0x31a0
     [ ... ]
     neigh_xmit+0x2f9/0x940
     mpls_xmit+0x911/0x1600 [mpls_iptunnel]
     lwtunnel_xmit+0x18f/0x450
     ip_finish_output2+0x867/0x2040
     [ ... ]
    
    Fixes: 61adedf3 ("route: move lwtunnel state to dst_entry")
    Signed-off-by: default avatarTaehee Yoo <ap420073@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    67a9c943
dst_metadata.h 5.15 KB