TCP over IPV6 would incorrectly inherit the GSO settings.
This would cause kernel to send Tcp Segmentation Offload packets for
IPV6 data to devices that can't handle it. It caused the sky2 driver
to lock http://bugzilla.kernel.org/show_bug.cgi?id=7050
and the e1000 would generate bogus packets. I can't blame the
hardware for gagging if the upper layers feed it garbage.
This was a new bug in 2.6.18 introduced with GSO support.
Signed-off-by: Stephen Hemminger <[email protected]>
--- linux-2.6.orig/net/ipv6/tcp_ipv6.c 2006-08-03 09:09:16.000000000 -0700
+++ linux-2.6/net/ipv6/tcp_ipv6.c 2006-08-25 15:30:31.000000000 -0700
@@ -944,7 +944,7 @@
* comment in that function for the gory details. -acme
*/
- sk->sk_gso_type = SKB_GSO_TCPV6;
+ newsk->sk_gso_type = SKB_GSO_TCPV6;
__ip6_dst_store(newsk, dst, NULL);
newtcp6sk = (struct tcp6_sock *)newsk;
From: Stephen Hemminger <[email protected]>
Date: Fri, 25 Aug 2006 15:43:53 -0700
> TCP over IPV6 would incorrectly inherit the GSO settings.
> This would cause kernel to send Tcp Segmentation Offload packets for
> IPV6 data to devices that can't handle it. It caused the sky2 driver
> to lock http://bugzilla.kernel.org/show_bug.cgi?id=7050
> and the e1000 would generate bogus packets. I can't blame the
> hardware for gagging if the upper layers feed it garbage.
>
> This was a new bug in 2.6.18 introduced with GSO support.
>
> Signed-off-by: Stephen Hemminger <[email protected]>
Good catch. Applied, thanks Stephen.
Hello Stephen,
thanks for the fix, it fixes the problem for me. I closed the bug. On
which hardware did you reproduce the bug and how did you found it? Did
you use git bisect?
Thomas
On Sat, 26 Aug 2006 01:06:26 +0200
Thomas Glanzmann <[email protected]> wrote:
> Hello Stephen,
> thanks for the fix, it fixes the problem for me. I closed the bug. On
> which hardware did you reproduce the bug and how did you found it? Did
> you use git bisect?
>
> Thomas
Using sky2 on Intel motherboard and git bisect. But Jesse found same problem
on e1000. Bisect was relatively fast since it was either base net code or driver.
Starting with 2.6.17, everything worked, and latest was busted.
git bisect start net drivers/net/sky2.c
Test was ipv6 slogin, then run dmesg. If that worked then run top and cause
lots of other traffic by just doing a firefox open-tabs to blast lots of connections.
Wanted to induce tcp-ipv6 to get congested.
--
Stephen Hemminger <[email protected]>
All non-trivial abstractions, to some degree, are leaky.
On Sat, 26 Aug 2006 01:06:26 +0200
Thomas Glanzmann <[email protected]> wrote:
> Hello Stephen,
> thanks for the fix, it fixes the problem for me. I closed the bug. On
> which hardware did you reproduce the bug and how did you found it? Did
> you use git bisect?
>
> Thomas
Finding the line was luck. I spotted similar (but correct) code in
DCCP over IPV6.
--
Stephen Hemminger <[email protected]>
All non-trivial abstractions, to some degree, are leaky.
On Fri, Aug 25, 2006 at 03:43:53PM -0700, Stephen Hemminger wrote:
> TCP over IPV6 would incorrectly inherit the GSO settings.
> This would cause kernel to send Tcp Segmentation Offload packets for
> IPV6 data to devices that can't handle it. It caused the sky2 driver
> to lock http://bugzilla.kernel.org/show_bug.cgi?id=7050
> and the e1000 would generate bogus packets. I can't blame the
> hardware for gagging if the upper layers feed it garbage.
>
> This was a new bug in 2.6.18 introduced with GSO support.
>
> Signed-off-by: Stephen Hemminger <[email protected]>
Thanks for catching this Stephen!
Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt