diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2007-11-26 10:11:19 -0500 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2007-11-26 10:11:19 -0500 |
commit | 2d4baff8da06f424a6fca10e26434c4926a7c3df (patch) | |
tree | c0f537d5cf0aca544ba77d11b529f146f5ba5bc8 /include | |
parent | 218ad12f42e0b6207105cde8fd13017d1ed449e4 (diff) |
[SKBUFF]: Free old skb properly in skb_morph
The skb_morph function only freed the data part of the dst skb, but leaked
the auxiliary data such as the netfilter fields. This patch fixes this by
moving the relevant parts from __kfree_skb to skb_release_all and calling
it in skb_morph.
It also makes kfree_skbmem static since it's no longer called anywhere else
and it now no longer does skb_release_data.
Thanks to Yasuyuki KOZAKAI for finding this problem and posting a patch for
it.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/skbuff.h | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 91140fe8c119..bddd50bd6878 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -356,7 +356,6 @@ static inline struct sk_buff *alloc_skb_fclone(unsigned int size, | |||
356 | return __alloc_skb(size, priority, 1, -1); | 356 | return __alloc_skb(size, priority, 1, -1); |
357 | } | 357 | } |
358 | 358 | ||
359 | extern void kfree_skbmem(struct sk_buff *skb); | ||
360 | extern struct sk_buff *skb_morph(struct sk_buff *dst, struct sk_buff *src); | 359 | extern struct sk_buff *skb_morph(struct sk_buff *dst, struct sk_buff *src); |
361 | extern struct sk_buff *skb_clone(struct sk_buff *skb, | 360 | extern struct sk_buff *skb_clone(struct sk_buff *skb, |
362 | gfp_t priority); | 361 | gfp_t priority); |