diff
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -6,5 +6,16 @@
 2 				int newheadroom, int newtailroom,
 3 				gfp_t gfp_mask)
 8 	struct sk_buff *n = __alloc_skb(newheadroom + skb->len + newtailroom,
+	if (newheadroom < 0 || newtailroom < 0 || skb->len < 0)
+		return ERR_PTR(-EINVAL);
+
+	if (newheadroom > INT_MAX - skb->len ||
+	    newheadroom + skb->len > INT_MAX - newtailroom)
+		return ERR_PTR(-ENOMEM);
+
+	struct sk_buff *n = __alloc_skb(newheadroom + skb->len + newtailroom,
+                                          gfp_mask, NUMA_NO_NODE);
+
+	
 