Commit c5923c01 authored by Ben Hutchings's avatar Ben Hutchings

net: add kfree_skb_list()

Extracted from upstream commit bd8a7036 "gre: fix a possible skb leak".

This patch adds a kfree_skb_list() helper.
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
parent bd33f9f3
...@@ -534,6 +534,7 @@ static inline struct rtable *skb_rtable(const struct sk_buff *skb) ...@@ -534,6 +534,7 @@ static inline struct rtable *skb_rtable(const struct sk_buff *skb)
} }
extern void kfree_skb(struct sk_buff *skb); extern void kfree_skb(struct sk_buff *skb);
extern void kfree_skb_list(struct sk_buff *segs);
extern void consume_skb(struct sk_buff *skb); extern void consume_skb(struct sk_buff *skb);
extern void __kfree_skb(struct sk_buff *skb); extern void __kfree_skb(struct sk_buff *skb);
extern struct sk_buff *__alloc_skb(unsigned int size, extern struct sk_buff *__alloc_skb(unsigned int size,
......
...@@ -277,15 +277,8 @@ EXPORT_SYMBOL(dev_alloc_skb); ...@@ -277,15 +277,8 @@ EXPORT_SYMBOL(dev_alloc_skb);
static void skb_drop_list(struct sk_buff **listp) static void skb_drop_list(struct sk_buff **listp)
{ {
struct sk_buff *list = *listp; kfree_skb_list(*listp);
*listp = NULL; *listp = NULL;
do {
struct sk_buff *this = list;
list = list->next;
kfree_skb(this);
} while (list);
} }
static inline void skb_drop_fraglist(struct sk_buff *skb) static inline void skb_drop_fraglist(struct sk_buff *skb)
...@@ -436,6 +429,17 @@ void kfree_skb(struct sk_buff *skb) ...@@ -436,6 +429,17 @@ void kfree_skb(struct sk_buff *skb)
} }
EXPORT_SYMBOL(kfree_skb); EXPORT_SYMBOL(kfree_skb);
void kfree_skb_list(struct sk_buff *segs)
{
while (segs) {
struct sk_buff *next = segs->next;
kfree_skb(segs);
segs = next;
}
}
EXPORT_SYMBOL(kfree_skb_list);
/** /**
* consume_skb - free an skbuff * consume_skb - free an skbuff
* @skb: buffer to free * @skb: buffer to free
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment