diff
+ static inline void *safe_skb_put(struct sk_buff *skb, unsigned int len)
+ {
+     if (len > skb_tailroom(skb))
+         return NULL;
+     return skb_put(skb, len);
+ }

  // In the main function:
- skb_put(n, skb->len);
+ if (!safe_skb_put(n, skb->len)) {
+     kfree_skb(n);
+     return NULL;
+ }
