]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
detect/tag: reuse result of previous host lookup
authorVictor Julien <vjulien@oisf.net>
Wed, 15 Nov 2023 18:18:08 +0000 (19:18 +0100)
committerVictor Julien <victor@inliniac.net>
Thu, 16 Nov 2023 20:36:37 +0000 (21:36 +0100)
Minor optimization that could lead to a reduction in host table
lookups if more than one host feature is in use.

src/detect-engine-tag.c

index aceb5f10c6f4814edbf34afb95c4b9530bb9962a..e6a4134048e40108fdf0bf1f35a3c2f450f7ef54 100644 (file)
@@ -493,6 +493,26 @@ static void TagHandlePacketHost(Host *host, Packet *p)
     }
 }
 
+static Host *GetLockedSrcHost(Packet *p)
+{
+    if (p->host_src == NULL) {
+        p->host_src = HostLookupHostFromHash(&p->src);
+    } else {
+        HostLock(p->host_src);
+    }
+    return p->host_src;
+}
+
+static Host *GetLockedDstHost(Packet *p)
+{
+    if (p->host_dst == NULL) {
+        p->host_dst = HostLookupHostFromHash(&p->dst);
+    } else {
+        HostLock(p->host_dst);
+    }
+    return p->host_dst;
+}
+
 /**
  * \brief Search tags for src and dst. Update entries of the tag, remove if necessary
  *
@@ -516,20 +536,22 @@ void TagHandlePacket(DetectEngineCtx *de_ctx,
         TagHandlePacketFlow(p->flow, p);
     }
 
-    Host *src = HostLookupHostFromHash(&p->src);
-    if (src) {
+    Host *src = GetLockedSrcHost(p);
+    if (src != NULL) {
         if (TagHostHasTag(src)) {
-            TagHandlePacketHost(src,p);
+            TagHandlePacketHost(src, p);
         }
-        HostRelease(src);
+        HostUnlock(src);
     }
-    Host *dst = HostLookupHostFromHash(&p->dst);
-    if (dst) {
+
+    Host *dst = GetLockedDstHost(p);
+    if (dst != NULL) {
         if (TagHostHasTag(dst)) {
-            TagHandlePacketHost(dst,p);
+            TagHandlePacketHost(dst, p);
         }
-        HostRelease(dst);
+        HostUnlock(dst);
     }
+
     SCReturn;
 }