diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2006-09-27 19:03:36 -0700 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-09-28 18:02:45 -0700 |
commit | 1a9e9ef684ec2bd27fcdb373a82957a0c050daf6 (patch) | |
tree | ffe9696b24a6d62de6c61f20233224e7f8aefcb6 /net | |
parent | 8122adf06e6f93ae608cf8227e878cc44f4a8fd1 (diff) | |
download | op-kernel-dev-1a9e9ef684ec2bd27fcdb373a82957a0c050daf6.zip op-kernel-dev-1a9e9ef684ec2bd27fcdb373a82957a0c050daf6.tar.gz |
[IPV6]: Disable SG for GSO unless we have checksum
Because the system won't turn off the SG flag for us we
need to do this manually on the IPv6 path. Otherwise we
will throw IPv6 packets with bad checksums at the hardware.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv6/ipv6_sockglue.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 4f3bb7f..de6b919 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c @@ -123,6 +123,9 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb, int features) struct ipv6hdr *ipv6h; struct inet6_protocol *ops; + if (!(features & NETIF_F_HW_CSUM)) + features &= ~NETIF_F_SG; + if (unlikely(skb_shinfo(skb)->gso_type & ~(SKB_GSO_UDP | SKB_GSO_DODGY | |