• Octavian Purdila's avatar
    tcp: fix for splice receive when used with software LRO · db43a282
    Octavian Purdila authored
    If an skb has nr_frags set to zero but its frag_list is not empty (as
    it can happen if software LRO is enabled), and a previous
    tcp_read_sock has consumed the linear part of the skb, then
    __skb_splice_bits:
    
    (a) incorrectly reports an error and
    
    (b) forgets to update the offset to account for the linear part
    
    Any of the two problems will cause the subsequent __skb_splice_bits
    call (the one that handles the frag_list skbs) to either skip data,
    or, if the unadjusted offset is greater then the size of the next skb
    in the frag_list, make tcp_splice_read loop forever.
    Signed-off-by: default avatarOctavian Purdila <opurdila@ixiacom.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    db43a282
skbuff.c 64.2 KB