]> The Tcpdump Group git mirrors - tcpdump/commitdiff
TCP: Fix Reset segment processing
authorFrancois-Xavier Le Bail <[email protected]>
Fri, 1 Nov 2024 21:20:24 +0000 (22:20 +0100)
committerfxlb <[email protected]>
Sat, 2 Nov 2024 14:53:24 +0000 (14:53 +0000)
When a received RST segment contains data, this is diagnostic data that
explains the cause of the RST.

So we have to stop processing, even if we don't print the data (no "-v").

Rename two test outputs, with "-v" in the names.
Add two test cases (existing pcap printed without "-v").

print-tcp.c
tests/TESTLIST
tests/tcp_rst_data-trunc-v.out [new file with mode: 0644]
tests/tcp_rst_data-trunc.out
tests/tcp_rst_data-v.out [new file with mode: 0644]
tests/tcp_rst_data.out

index 38f80d9b2336e05087ef5e556d769fc12a15d6be..4314ec22bfbe78aad18489c86f19c92642a900b8 100644 (file)
@@ -729,8 +729,11 @@ tcp_print(netdissect_options *ndo,
                 nd_trunc_longjmp(ndo);
         }
         bp += header_len;
-        if ((flags & TH_RST) && ndo->ndo_vflag) {
-                print_tcp_rst_data(ndo, bp, length);
+        if (flags & TH_RST) {
+                if(ndo->ndo_vflag)
+                        print_tcp_rst_data(ndo, bp, length);
+                else
+                        ND_TCHECK_LEN(bp, length);
                 return;
         }
 
index f56ac85536eb4e603e86366704dcf1a57435b4cc..1e0759bc24d3f6c8b8cccd4227047954084def5a 100644 (file)
@@ -39,9 +39,11 @@ tcp-handshake-nano-tttt tcp-handshake-nano.pcap tcp-handshake-nano-tttt.out -ttt
 tcp-handshake-nano-ttttt tcp-handshake-nano.pcap tcp-handshake-nano-ttttt.out -ttttt -q --nano SPECIAL_t
 
 # TCP with data in the RST segment
-tcp_rst_data tcp_rst_data.pcap tcp_rst_data.out -v
+tcp_rst_data tcp_rst_data.pcap tcp_rst_data-v.out -v
+tcp_rst_data tcp_rst_data.pcap tcp_rst_data.out
 # TCP with data in the RST segment, truncated example
-tcp_rst_data-trunc tcp_rst_data-trunc.pcap tcp_rst_data-trunc.out -v
+tcp_rst_data-trunc tcp_rst_data-trunc.pcap tcp_rst_data-trunc-v.out -v
+tcp_rst_data-trunc tcp_rst_data-trunc.pcap tcp_rst_data-trunc.out
 
 # TCP
 tcp_eight_lowest_weight_flags_set tcp_eight_lowest_weight_flags_set.pcap tcp_eight_lowest_weight_flags_set.out
diff --git a/tests/tcp_rst_data-trunc-v.out b/tests/tcp_rst_data-trunc-v.out
new file mode 100644 (file)
index 0000000..0f25b0b
--- /dev/null
@@ -0,0 +1,2 @@
+    1  2013-02-26 22:03:19.190965 IP (tos 0x20, ttl 243, id 8243, offset 0, flags [DF], proto TCP (6), length 98)
+    199.204.31.89.80 > 172.16.133.41.52875: Flags [R.], seq 1617159969:1617160027, ack 1936660873, win 5785, length 58 [!RST+ BIG-IP: [0x11c5672:3045] {peer]
index 0f25b0b475068aa75745bca705d4fe32c444cd33..e368f365ffc01c41e18425b7642f95e85f433349 100644 (file)
@@ -1,2 +1 @@
-    1  2013-02-26 22:03:19.190965 IP (tos 0x20, ttl 243, id 8243, offset 0, flags [DF], proto TCP (6), length 98)
-    199.204.31.89.80 > 172.16.133.41.52875: Flags [R.], seq 1617159969:1617160027, ack 1936660873, win 5785, length 58 [!RST+ BIG-IP: [0x11c5672:3045] {peer]
+    1  2013-02-26 22:03:19.190965 IP 199.204.31.89.80 > 172.16.133.41.52875: Flags [R.], seq 1617159969:1617160027, ack 1936660873, win 5785, length 58 [|tcp]
diff --git a/tests/tcp_rst_data-v.out b/tests/tcp_rst_data-v.out
new file mode 100644 (file)
index 0000000..13f7700
--- /dev/null
@@ -0,0 +1,2 @@
+    1  2013-02-26 22:03:19.190965 IP (tos 0x20, ttl 243, id 8243, offset 0, flags [DF], proto TCP (6), length 98)
+    199.204.31.89.80 > 172.16.133.41.52875: Flags [R.], cksum 0x8471 (correct), seq 1617159969:1617160027, ack 1936660873, win 5785, length 58 [RST+ BIG-IP: [0x11c5672:3045] {peer]
index 13f77006044eba81e274913558d14e2da9ac0364..d43424c286b03f181210a260f1e5549688fe1f97 100644 (file)
@@ -1,2 +1 @@
-    1  2013-02-26 22:03:19.190965 IP (tos 0x20, ttl 243, id 8243, offset 0, flags [DF], proto TCP (6), length 98)
-    199.204.31.89.80 > 172.16.133.41.52875: Flags [R.], cksum 0x8471 (correct), seq 1617159969:1617160027, ack 1936660873, win 5785, length 58 [RST+ BIG-IP: [0x11c5672:3045] {peer]
+    1  2013-02-26 22:03:19.190965 IP 199.204.31.89.80 > 172.16.133.41.52875: Flags [R.], seq 1617159969:1617160027, ack 1936660873, win 5785, length 58