• Florian Westphal's avatar
    netfilter: bridge: restore vlan tag when refragmenting · d7b59742
    Florian Westphal authored
    If bridge netfilter is used with both
    bridge-nf-call-iptables and bridge-nf-filter-vlan-tagged enabled
    then ip fragments in VLAN frames are sent without the vlan header.
    
    This has never worked reliably.  Turns out this relied on pre-3.5
    behaviour where skb frag_list was used to store ip fragments;
    ip_fragment() then re-used these skbs.
    
    But since commit 3cc49492
    ("ipv4: use skb coalescing in defragmentation") this is no longer
    the case.  ip_do_fragment now needs to allocate new skbs, but these
    don't contain the vlan tag information anymore.
    
    Fix it by storing vlan information of the ressembled skb in the
    br netfilter percpu frag area, and restore them for each of the
    fragments.
    
    Fixes: 3cc49492 ("ipv4: use skb coalescing in defragmentation")
    Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    d7b59742
br_netfilter.c 33.1 KB