virtio_net: Set correct gso->hdr_len
Through a bug in the tun driver, I noticed that virtio_net is producing bogus hdr_len values. In particular, it only includes the IP header in the linear area, and excludes the entire TCP header. This causes the TCP header to be copied twice for each packet. (The bug omitted the second copy :) This patch corrects this. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1feede014b
commit
b82f08ea16
|
@ -470,7 +470,7 @@ static int xmit_skb(struct virtnet_info *vi, struct sk_buff *skb)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skb_is_gso(skb)) {
|
if (skb_is_gso(skb)) {
|
||||||
hdr->hdr_len = skb_transport_header(skb) - skb->data;
|
hdr->hdr_len = skb_headlen(skb);
|
||||||
hdr->gso_size = skb_shinfo(skb)->gso_size;
|
hdr->gso_size = skb_shinfo(skb)->gso_size;
|
||||||
if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4)
|
if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4)
|
||||||
hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV4;
|
hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV4;
|
||||||
|
|
Loading…
Reference in New Issue