• Florian Westphal's avatar
    ipv6: avoid write to a possibly cloned skb · 79e49503
    Florian Westphal authored
    ip6_fragment, in case skb has a fraglist, checks if the
    skb is cloned.  If it is, it will move to the 'slow path' and allocates
    new skbs for each fragment.
    
    However, right before entering the slowpath loop, it updates the
    nexthdr value of the last ipv6 extension header to NEXTHDR_FRAGMENT,
    to account for the fragment header that will be inserted in the new
    ipv6-fragment skbs.
    
    In case original skb is cloned this munges nexthdr value of another
    skb.  Avoid this by doing the nexthdr update for each of the new fragment
    skbs separately.
    
    This was observed with tcpdump on a bridge device where netfilter ipv6
    reassembly is active:  tcpdump shows malformed fragment headers as
    the l4 header (icmpv6, tcp, etc). is decoded as a fragment header.
    
    Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Reported-by: default avatarAndreas Karis <akaris@redhat.com>
    Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    79e49503
ip6_output.c 46.3 KB