diff options
Diffstat (limited to 'net/ipv4/ip_gre.c')
-rw-r--r-- | net/ipv4/ip_gre.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index 63282934725e..5c14ed63e56c 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c | |||
@@ -809,7 +809,8 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
809 | 809 | ||
810 | max_headroom = LL_RESERVED_SPACE(tdev) + gre_hlen; | 810 | max_headroom = LL_RESERVED_SPACE(tdev) + gre_hlen; |
811 | 811 | ||
812 | if (skb_headroom(skb) < max_headroom || skb_cloned(skb) || skb_shared(skb)) { | 812 | if (skb_headroom(skb) < max_headroom || skb_shared(skb)|| |
813 | (skb_cloned(skb) && !skb_clone_writable(skb, 0))) { | ||
813 | struct sk_buff *new_skb = skb_realloc_headroom(skb, max_headroom); | 814 | struct sk_buff *new_skb = skb_realloc_headroom(skb, max_headroom); |
814 | if (!new_skb) { | 815 | if (!new_skb) { |
815 | ip_rt_put(rt); | 816 | ip_rt_put(rt); |