• D
    tcp: Set CHECKSUM_UNNECESSARY in tcp_init_nondata_skb · 2e8e18ef
    David S. Miller 提交于
    Back in commit 04a0551c
    ("loopback: Drop obsolete ip_summed setting") we stopped
    setting CHECKSUM_UNNECESSARY in the loopback xmit.
    
    This is because such a setting was a lie since it implies that the
    checksum field of the packet is properly filled in.
    
    Instead what happens normally is that CHECKSUM_PARTIAL is set and
    skb->csum is calculated as needed.
    
    But this was only happening for TCP data packets (via the
    skb->ip_summed assignment done in tcp_sendmsg()).  It doesn't
    happen for non-data packets like ACKs etc.
    
    Fix this by setting skb->ip_summed in the common non-data packet
    constructor.  It already is setting skb->csum to zero.
    
    But this reminds us that we still have things like ip_output.c's
    ip_dev_loopback_xmit() which sets skb->ip_summed to the value
    CHECKSUM_UNNECESSARY, which Herbert's patch teaches us is not
    valid.  So we'll have to address that at some point too.
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    2e8e18ef
tcp_output.c 81.1 KB