]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
detect: fix FP on ICMP unreachable errors 4115/head
authorVictor Julien <victor@inliniac.net>
Thu, 22 Aug 2019 09:28:36 +0000 (11:28 +0200)
committerVictor Julien <victor@inliniac.net>
Thu, 22 Aug 2019 12:21:15 +0000 (14:21 +0200)
ICMP unreachable errors are linked to the flow they send an error for.
This would lead to the detection engine calling the TX inspection
engines on them.

The stream inspect engine would default to a match for non-UDP
and non-TCP as for ICMP we're not expected to use a TX inspect engine
for stream data.

This all would lead to a false positive match.

This patch fixes this by making sure the TX engines are not called if
the packet protocol and flow protocol are not the same.

Bug #2769.

src/detect.c

index 7318aa0b30cb08f97fa70b63313b70dc070a45c1..62f430dc0b530c4fcdee2313eab693004ce98b35 100644 (file)
@@ -130,8 +130,8 @@ static void DetectRun(ThreadVars *th_v,
     DetectRulePacketRules(th_v, de_ctx, det_ctx, p, pflow, &scratch);
     PACKET_PROFILING_DETECT_END(p, PROF_DETECT_RULES);
 
-    /* run tx/state inspection */
-    if (pflow && pflow->alstate) {
+    /* run tx/state inspection. Don't call for ICMP error msgs. */
+    if (pflow && pflow->alstate && likely(pflow->proto == p->proto)) {
         PACKET_PROFILING_DETECT_START(p, PROF_DETECT_TX);
         DetectRunTx(th_v, de_ctx, det_ctx, p, pflow, &scratch);
         PACKET_PROFILING_DETECT_END(p, PROF_DETECT_TX);