diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/core/skbuff.c | 20 | ||||
| -rw-r--r-- | net/ipv4/gre.c | 2 |
2 files changed, 13 insertions, 9 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index cfd777bd6bd0..1c1738cc4538 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
| @@ -483,15 +483,8 @@ EXPORT_SYMBOL(skb_add_rx_frag); | |||
| 483 | 483 | ||
| 484 | static void skb_drop_list(struct sk_buff **listp) | 484 | static void skb_drop_list(struct sk_buff **listp) |
| 485 | { | 485 | { |
| 486 | struct sk_buff *list = *listp; | 486 | kfree_skb_list(*listp); |
| 487 | |||
| 488 | *listp = NULL; | 487 | *listp = NULL; |
| 489 | |||
| 490 | do { | ||
| 491 | struct sk_buff *this = list; | ||
| 492 | list = list->next; | ||
| 493 | kfree_skb(this); | ||
| 494 | } while (list); | ||
| 495 | } | 488 | } |
| 496 | 489 | ||
| 497 | static inline void skb_drop_fraglist(struct sk_buff *skb) | 490 | static inline void skb_drop_fraglist(struct sk_buff *skb) |
| @@ -651,6 +644,17 @@ void kfree_skb(struct sk_buff *skb) | |||
| 651 | } | 644 | } |
| 652 | EXPORT_SYMBOL(kfree_skb); | 645 | EXPORT_SYMBOL(kfree_skb); |
| 653 | 646 | ||
| 647 | void kfree_skb_list(struct sk_buff *segs) | ||
| 648 | { | ||
| 649 | while (segs) { | ||
| 650 | struct sk_buff *next = segs->next; | ||
| 651 | |||
| 652 | kfree_skb(segs); | ||
| 653 | segs = next; | ||
| 654 | } | ||
| 655 | } | ||
| 656 | EXPORT_SYMBOL(kfree_skb_list); | ||
| 657 | |||
| 654 | /** | 658 | /** |
| 655 | * skb_tx_error - report an sk_buff xmit error | 659 | * skb_tx_error - report an sk_buff xmit error |
| 656 | * @skb: buffer that triggered an error | 660 | * @skb: buffer that triggered an error |
diff --git a/net/ipv4/gre.c b/net/ipv4/gre.c index b2e805af9b87..7856d1651d05 100644 --- a/net/ipv4/gre.c +++ b/net/ipv4/gre.c | |||
| @@ -178,7 +178,7 @@ static struct sk_buff *gre_gso_segment(struct sk_buff *skb, | |||
| 178 | 178 | ||
| 179 | err = __skb_linearize(skb); | 179 | err = __skb_linearize(skb); |
| 180 | if (err) { | 180 | if (err) { |
| 181 | kfree_skb(segs); | 181 | kfree_skb_list(segs); |
| 182 | segs = ERR_PTR(err); | 182 | segs = ERR_PTR(err); |
| 183 | goto out; | 183 | goto out; |
| 184 | } | 184 | } |
