summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorLennert Buytenhek <buytenh@marvell.com>2008-11-11 06:45:05 +0100
committerDavid S. Miller <davem@davemloft.net>2008-11-11 06:45:05 +0100
commit5cd33db2120b5ce972568711156f91da83bff2d7 (patch)
tree764e7b41ee2ffdf0e42a7dd005ece814ce88680d /net
parentnet: fix /proc/net/snmp as memory corruptor (diff)
downloadlinux-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.c2
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;
}