diff --git a/net/core/skbuff.c b/net/core/skbuff.c index b0f9290a8a6688..0fe8b0579f1b4d 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -4106,6 +4106,11 @@ struct sk_buff *skb_segment_list(struct sk_buff *skb, skb_push(skb, -skb_network_offset(skb) + offset); + /* Ensure the head is writeable before touching the shared info */ + err = skb_unclone(skb, GFP_ATOMIC); + if (err) + goto err_linearize; + skb_shinfo(skb)->frag_list = NULL; while (list_skb) {