Index: uspace/srv/net/tcp/pdu.c
===================================================================
--- uspace/srv/net/tcp/pdu.c	(revision 83e69b9d9f7d95837264f28f5b2c9cadf738abbc)
+++ uspace/srv/net/tcp/pdu.c	(revision 5823f4dafdc6e95ad32a5172bfc2a5313cef59d7)
@@ -324,4 +324,5 @@
 	size_t text_size;
 	uint16_t checksum;
+	int rc;
 
 	npdu = tcp_pdu_new();
@@ -331,10 +332,17 @@
 	npdu->src = epp->local.addr;
 	npdu->dest = epp->remote.addr;
-	tcp_header_encode(epp, seg, &npdu->header, &npdu->header_size);
+	rc = tcp_header_encode(epp, seg, &npdu->header, &npdu->header_size);
+	if (rc != EOK) {
+		free(npdu);
+		return rc;
+	}
 
 	text_size = tcp_segment_text_size(seg);
 	npdu->text = calloc(1, text_size);
-	if (npdu->text == NULL)
+	if (npdu->text == NULL) {
+		free(npdu->header);
+		free(npdu);
 		return ENOMEM;
+	}
 
 	npdu->text_size = text_size;
