diff
--- a/tipc_buf_append.c
+++ b/tipc_buf_append.c
@@ -3,6 +3,7 @@
 	struct sk_buff *head = *headbuf;
 	struct sk_buff *frag = *buf;
 	struct sk_buff *tail = NULL;
+	struct sk_buff *temp = NULL;
 	struct tipc_msg *msg;
 	u32 fragid;
 	int delta;
@@ -21,6 +22,7 @@
 	if (fragid == FIRST_FRAGMENT) {
 		if (unlikely(head))
 			goto err;
+		temp = *buf;
 22 		*buf = NULL; 
 		if (skb_has_frag_list(frag) && __skb_linearize(frag))
 			goto err;
@@ -29,6 +31,7 @@
 			goto err;
 28 		head = *headbuf = frag;
 29 		TIPC_SKB_CB(head)->tail = NULL;
+		kfree_skb(temp);
 30 		return 0;
 		*buf = NULL; 
 31 	}

