mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-11 15:40:50 +00:00
tg3: fix ipv6 header length computation
tg3_start_xmit() makes the wrong assumption for TSOV6 that skb->head doesnt include any payload data. if (skb_is_gso_v6(skb)) hdr_len = skb_headlen(skb) - ETH_HLEN; This is not true anymore after commit f07d960df3 (tcp: avoid frag allocation for small frames) We should instead use : skb_transport_offset(skb) + tcp_hdrlen(skb) Its also true for IPv4 Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> CC: Matt Carlson <mcarlson@broadcom.com> CC: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
da057fb7d2
commit
a5a1195559
@ -6667,14 +6667,9 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
iph = ip_hdr(skb);
|
||||
tcp_opt_len = tcp_optlen(skb);
|
||||
|
||||
if (skb_is_gso_v6(skb)) {
|
||||
hdr_len = skb_headlen(skb) - ETH_HLEN;
|
||||
} else {
|
||||
u32 ip_tcp_len;
|
||||
|
||||
ip_tcp_len = ip_hdrlen(skb) + sizeof(struct tcphdr);
|
||||
hdr_len = ip_tcp_len + tcp_opt_len;
|
||||
hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
|
||||
|
||||
if (!skb_is_gso_v6(skb)) {
|
||||
iph->check = 0;
|
||||
iph->tot_len = htons(mss + hdr_len);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user