Index: uspace/srv/net/tl/tcp/segment.c
===================================================================
--- uspace/srv/net/tl/tcp/segment.c	(revision d9cf684a06c89943fd883b794b0b10a3a95d4bd9)
+++ uspace/srv/net/tl/tcp/segment.c	(revision fe5e9629448f7d1befa73d7c974f8cedf7bfcbcd)
@@ -119,6 +119,12 @@
 		return NULL;
 
-	rseg->ctrl = CTL_RST;
-	rseg->seq = seg->ack;
+	if ((seg->ctrl & CTL_ACK) == 0) {
+		rseg->ctrl = CTL_RST | CTL_ACK;
+		rseg->seq = 0;
+		rseg->ack = seg->seq + seg->len;
+	} else {
+		rseg->ctrl = CTL_RST;
+		rseg->seq = seg->ack;
+	}
 
 	return rseg;
Index: uspace/srv/net/tl/tcp/tcp.c
===================================================================
--- uspace/srv/net/tl/tcp/tcp.c	(revision d9cf684a06c89943fd883b794b0b10a3a95d4bd9)
+++ uspace/srv/net/tl/tcp/tcp.c	(revision fe5e9629448f7d1befa73d7c974f8cedf7bfcbcd)
@@ -36,4 +36,5 @@
 
 #include <async.h>
+#include <bitops.h>
 #include <byteorder.h>
 #include <errno.h>
@@ -191,11 +192,30 @@
 	tcp_pdu_t *pdu;
 	size_t hdr_size;
-
-	/* XXX Header options */
-	hdr_size = sizeof(tcp_header_t);
+	tcp_header_t *hdr;
+	uint32_t data_offset;
+
+	if (pdu_raw_size < sizeof(tcp_header_t)) {
+		log_msg(LVL_WARN, "pdu_raw_size = %zu < sizeof(tcp_header_t) = %zu",
+		    pdu_raw_size, sizeof(tcp_header_t));
+		pq_release_remote(net_sess, packet_get_id(packet));
+		return EINVAL;
+	}
+
+	hdr = (tcp_header_t *)pdu_raw;
+	data_offset = BIT_RANGE_EXTRACT(uint32_t, DF_DATA_OFFSET_h, DF_DATA_OFFSET_l,
+	    uint16_t_be2host(hdr->doff_flags));
+
+	hdr_size = sizeof(uint32_t) * data_offset;
 
 	if (pdu_raw_size < hdr_size) {
 		log_msg(LVL_WARN, "pdu_raw_size = %zu < hdr_size = %zu",
 		    pdu_raw_size, hdr_size);
+		pq_release_remote(net_sess, packet_get_id(packet));
+		return EINVAL;
+	}
+
+	if (hdr_size < sizeof(tcp_header_t)) {
+		log_msg(LVL_WARN, "hdr_size = %zu < sizeof(tcp_header_t) = %zu",
+		    hdr_size, sizeof(tcp_header_t));
 		pq_release_remote(net_sess, packet_get_id(packet));
 		return EINVAL;
