• Petr Machata's avatar
    net: skb_scrub_packet(): Scrub offload_fwd_mark · b5dd186d
    Petr Machata authored
    When a packet is trapped and the corresponding SKB marked as
    already-forwarded, it retains this marking even after it is forwarded
    across veth links into another bridge. There, since it ingresses the
    bridge over veth, which doesn't have offload_fwd_mark, it triggers a
    warning in nbp_switchdev_frame_mark().
    
    Then nbp_switchdev_allowed_egress() decides not to allow egress from
    this bridge through another veth, because the SKB is already marked, and
    the mark (of 0) of course matches. Thus the packet is incorrectly
    blocked.
    
    Solve by resetting offload_fwd_mark() in skb_scrub_packet(). That
    function is called from tunnels and also from veth, and thus catches the
    cases where traffic is forwarded between bridges and transformed in a
    way that invalidates the marking.
    
    Fixes: 6bc506b4 ("bridge: switchdev: Add forward mark support for stacked devices")
    Fixes: abf4bb6b ("skbuff: Add the offload_mr_fwd_mark field")
    Signed-off-by: default avatarPetr Machata <petrm@mellanox.com>
    Suggested-by: default avatarIdo Schimmel <idosch@mellanox.com>
    Acked-by: default avatarJiri Pirko <jiri@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b5dd186d
skbuff.c 136 KB