• Herbert Xu ~{PmVHI~}'s avatar
    [TCP]: Avoid skb_pull if possible when trimming head · f2911969
    Herbert Xu ~{PmVHI~} authored
    Trimming the head of an skb by calling skb_pull can cause the packet
    to become unaligned if the length pulled is odd.  Since the length is
    entirely arbitrary for a FIN packet carrying data, this is actually
    quite common.
    
    Unaligned data is not the end of the world, but we should avoid it if
    it's easily done.  In this case it is trivial.  Since we're discarding
    all of the head data it doesn't matter whether we move skb->data forward
    or back.
    
    However, it is still possible to have unaligned skb->data in general.
    So network drivers should be prepared to handle it instead of crashing.
    
    This patch also adds an unlikely marking on len < headlen since partial
    ACKs on head data are extremely rare in the wild.  As the return value
    of __pskb_trim_head is no longer ever NULL that has been removed.
    Signed-off-by: default avatarHerbert Xu ~{PmV&gt;HI~} <herbert@gondor.apana.org.au>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f2911969
tcp_output.c 68.8 KB