• Eric Dumazet's avatar
    tcp: properly reset skb->truesize for tx recycling · d7cc399e
    Eric Dumazet authored
    tcp sendmsg() and sendpage() normally advance skb->data_len
    and skb->truesize by the payload added to an skb.
    
    But sendmsg(fd, ..., MSG_ZEROCOPY) has to account for whole pages,
    even if a single byte of payload is used in the page.
    
    This means that we can not assume skb->truesize can be adjusted
    by skb->data_len. We must instead overwrite its value.
    
    Otherwise skb->truesize is too big and can hit socket sndbuf limit,
    especially if the skb is recycled multiple times :/
    
    Fixes: 472c2e07 ("tcp: add one skb cache for tx")
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Cc: Soheil Hassas Yeganeh <soheil@google.com>
    Cc: Willem de Bruijn <willemb@google.com>
    Acked-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d7cc399e
tcp.c 103 KB