diff options
Diffstat (limited to 'net/core/dev.c')
| -rw-r--r-- | net/core/dev.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index e916ba8caccf..52cd71a4a343 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
| @@ -2694,10 +2694,12 @@ struct sk_buff *validate_xmit_skb(struct sk_buff *skb, struct net_device *dev) | |||
| 2694 | struct sk_buff *segs; | 2694 | struct sk_buff *segs; |
| 2695 | 2695 | ||
| 2696 | segs = skb_gso_segment(skb, features); | 2696 | segs = skb_gso_segment(skb, features); |
| 2697 | kfree_skb(skb); | 2697 | if (IS_ERR(segs)) { |
| 2698 | if (IS_ERR(segs)) | ||
| 2699 | segs = NULL; | 2698 | segs = NULL; |
| 2700 | skb = segs; | 2699 | } else if (segs) { |
| 2700 | consume_skb(skb); | ||
| 2701 | skb = segs; | ||
| 2702 | } | ||
| 2701 | } else { | 2703 | } else { |
| 2702 | if (skb_needs_linearize(skb, features) && | 2704 | if (skb_needs_linearize(skb, features) && |
| 2703 | __skb_linearize(skb)) | 2705 | __skb_linearize(skb)) |
