lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 17 Feb 2010 11:55:43 +0530 From: Ajit Khaparde <ajitkhaparde@...il.com> To: Herbert Xu <herbert@...dor.apana.org.au> Cc: davem@...emloft.net, kaber@...sh.net, netdev <netdev@...r.kernel.org> Subject: Re: [PATCH net-2.6] net: bug fix for vlan + gro issue On 16/02/10 19:40 +0800, Herbert Xu wrote: > On Fri, Feb 12, 2010 at 11:04:53AM +0530, Ajit Khaparde wrote: > > > > diff --git a/net/core/dev.c b/net/core/dev.c > > index be9924f..16aac06 100644 > > --- a/net/core/dev.c > > +++ b/net/core/dev.c > > @@ -2761,7 +2761,10 @@ gro_result_t napi_frags_finish(struct napi_struct *napi, struct sk_buff *skb, > > switch (ret) { > > case GRO_NORMAL: > > case GRO_HELD: > > - skb->protocol = eth_type_trans(skb, napi->dev); > > + if (skb->vlan_tci) > > + skb->protocol = eth_type_trans(skb, skb->dev); > > + else > > + skb->protocol = eth_type_trans(skb, napi->dev); > > We should be able to just use skb->dev here. Thanks Herbert. I think you meant something like this: + skb->protocol = eth_type_trans(skb, skb->dev); Here is the patch:- Traffic (tcp) doesnot start on a vlan interface when gro is enabled. Even the tcp handshake was not taking place. This is because, the eth_type_trans call before the netif_receive_skb in napi_gro_finish() resets the skb->dev to napi->dev from the previously set vlan netdev interface. This causes the ip_route_input to drop the incoming packet considering it as a packet coming from a martian source. I could repro this on 2.6.32.7 (stable) and 2.6.33-rc7. With this fix, the traffic starts and the test runs fine on both vlan and non-vlan interfaces. CC: Herbert Xu <herbert@...dor.apana.org.au> CC: Patrick McHardy <kaber@...sh.net> Signed-off-by: Ajit Khaparde <ajitk@...verengines.com> --- net/core/dev.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index be9924f..ec87421 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2761,7 +2761,7 @@ gro_result_t napi_frags_finish(struct napi_struct *napi, struct sk_buff *skb, switch (ret) { case GRO_NORMAL: case GRO_HELD: - skb->protocol = eth_type_trans(skb, napi->dev); + skb->protocol = eth_type_trans(skb, skb->dev); if (ret == GRO_HELD) skb_gro_pull(skb, -ETH_HLEN); -- 1.6.3.3 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists