diff
+ static void tipc_buf_append_cleanup(struct sk_buff **headbuf, struct sk_buff **buf, bool frag_freed)
+ {
+ 	if (!frag_freed)
+ 		kfree_skb(*buf);
+ 	kfree_skb(*headbuf);
+ 	*headbuf = NULL;
+ 	*buf = NULL;
+ }

1 int tipc_buf_append(struct sk_buff **headbuf, struct sk_buff **buf)
3 	struct sk_buff *head = *headbuf;
4 	struct sk_buff *frag = *buf;
+ 	bool frag_freed = false;
...
37 		kfree_skb_partial(frag, headstolen);
+ 		frag_freed = true;
...
61 err:
- 	kfree_skb(*buf);
- 	kfree_skb(*headbuf);
+ 	tipc_buf_append_cleanup(headbuf, buf, frag_freed);
