diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2012-01-22 20:22:09 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-01-23 14:25:01 -0500 |
commit | a5a1195559f2e20bd975f58e50f53ebe84d5cca6 (patch) | |
tree | b8122ef05434f9543f331e6a03776bbbb3f1141d | |
parent | da057fb7d272c7e7609465a54bcac8ec8072ead5 (diff) |
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>
-rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index d529af99157d..a1f2e0fed78b 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
@@ -6667,14 +6667,9 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
6667 | iph = ip_hdr(skb); | 6667 | iph = ip_hdr(skb); |
6668 | tcp_opt_len = tcp_optlen(skb); | 6668 | tcp_opt_len = tcp_optlen(skb); |
6669 | 6669 | ||
6670 | if (skb_is_gso_v6(skb)) { | 6670 | hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN; |
6671 | hdr_len = skb_headlen(skb) - ETH_HLEN; | ||
6672 | } else { | ||
6673 | u32 ip_tcp_len; | ||
6674 | |||
6675 | ip_tcp_len = ip_hdrlen(skb) + sizeof(struct tcphdr); | ||
6676 | hdr_len = ip_tcp_len + tcp_opt_len; | ||
6677 | 6671 | ||
6672 | if (!skb_is_gso_v6(skb)) { | ||
6678 | iph->check = 0; | 6673 | iph->check = 0; |
6679 | iph->tot_len = htons(mss + hdr_len); | 6674 | iph->tot_len = htons(mss + hdr_len); |
6680 | } | 6675 | } |