diff mbox

gro: Reset dev pointer on reuse

Message ID 20110130041047.GA6290@gondor.apana.org.au
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Herbert Xu Jan. 30, 2011, 4:10 a.m. UTC
Hi:

gro: Reset dev pointer on reuse

On older kernels the VLAN code may zero skb->dev before dropping
it and causing it to be reused by GRO.

Unfortunately we didn't reset skb->dev in that case which causes
the next GRO user to get a bogus skb->dev pointer.

This particular problem no longer happens with the current upstream
kernel due to changes in VLAN processing.

However, for correctness we should still reset the skb->dev pointer
in the GRO reuse function in case a future user does the same thing.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>


Cheers,

Comments

David Miller Jan. 30, 2011, 4:45 a.m. UTC | #1
From: Herbert Xu <herbert@gondor.apana.org.au>
Date: Sun, 30 Jan 2011 15:10:47 +1100

> gro: Reset dev pointer on reuse
> 
> On older kernels the VLAN code may zero skb->dev before dropping
> it and causing it to be reused by GRO.
> 
> Unfortunately we didn't reset skb->dev in that case which causes
> the next GRO user to get a bogus skb->dev pointer.
> 
> This particular problem no longer happens with the current upstream
> kernel due to changes in VLAN processing.
> 
> However, for correctness we should still reset the skb->dev pointer
> in the GRO reuse function in case a future user does the same thing.
> 
> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Applied, thanks Herbert.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/core/dev.c b/net/core/dev.c
index 24ea2d7..93e44db 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3424,6 +3424,7 @@  static void napi_reuse_skb(struct napi_struct *napi, struct sk_buff *skb)
 	__skb_pull(skb, skb_headlen(skb));
 	skb_reserve(skb, NET_IP_ALIGN - skb_headroom(skb));
 	skb->vlan_tci = 0;
+	skb->dev = napi->dev;
 
 	napi->skb = skb;
 }