diff options
author | Lennert Buytenhek <buytenh@marvell.com> | 2008-11-11 06:45:05 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-11-11 06:45:05 +0100 |
commit | 5cd33db2120b5ce972568711156f91da83bff2d7 (patch) | |
tree | 764e7b41ee2ffdf0e42a7dd005ece814ce88680d /net | |
parent | net: fix /proc/net/snmp as memory corruptor (diff) | |
download | linux-5cd33db2120b5ce972568711156f91da83bff2d7.tar.xz linux-5cd33db2120b5ce972568711156f91da83bff2d7.zip |
net: fix setting of skb->tail in skb_recycle_check()
Since skb_reset_tail_pointer() reads skb->data, we need to set
skb->data before calling skb_reset_tail_pointer(). This was causing
spurious skb_over_panic()s from skb_put() being called on a recycled
skb that had its skb->tail set to beyond where it should have been.
Bug report from Peter van Valderen <linux@ddcrew.com>.
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/skbuff.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index ebb6b94f8af2..d49ef8301b5b 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -486,8 +486,8 @@ int skb_recycle_check(struct sk_buff *skb, int skb_size) shinfo->frag_list = NULL; memset(skb, 0, offsetof(struct sk_buff, tail)); - skb_reset_tail_pointer(skb); skb->data = skb->head + NET_SKB_PAD; + skb_reset_tail_pointer(skb); return 1; } |