• Willem de Bruijn's avatar
    packet: fix reserve calculation · 9aad13b0
    Willem de Bruijn authored
    Commit b84bbaf7 ("packet: in packet_snd start writing at link
    layer allocation") ensures that packet_snd always starts writing
    the link layer header in reserved headroom allocated for this
    purpose.
    
    This is needed because packets may be shorter than hard_header_len,
    in which case the space up to hard_header_len may be zeroed. But
    that necessary padding is not accounted for in skb->len.
    
    The fix, however, is buggy. It calls skb_push, which grows skb->len
    when moving skb->data back. But in this case packet length should not
    change.
    
    Instead, call skb_reserve, which moves both skb->data and skb->tail
    back, without changing length.
    
    Fixes: b84bbaf7 ("packet: in packet_snd start writing at link layer allocation")
    Reported-by: default avatarTariq Toukan <tariqt@mellanox.com>
    Signed-off-by: default avatarWillem de Bruijn <willemb@google.com>
    Acked-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    9aad13b0
af_packet.c 107 KB