]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
detect/iponly: move parsing only fields to init_data
authorVictor Julien <vjulien@oisf.net>
Fri, 5 Jan 2024 11:56:24 +0000 (12:56 +0100)
committerVictor Julien <victor@inliniac.net>
Wed, 21 Feb 2024 06:29:33 +0000 (07:29 +0100)
IP-only parse results were not used at runtime.

src/detect-engine-build.c
src/detect-engine-iponly.c
src/detect-parse.c
src/detect.h

index 0c07150e696ebdae85223feb92ccf48e8bc2cb7c..605a5682385229693c9f6b2069c65e137afd7b29 100644 (file)
@@ -1921,6 +1921,12 @@ static int SigMatchPrepare(DetectEngineCtx *de_ctx)
                 sm = nsm;
             }
         }
+        if (s->init_data->cidr_dst != NULL)
+            IPOnlyCIDRListFree(s->init_data->cidr_dst);
+
+        if (s->init_data->cidr_src != NULL)
+            IPOnlyCIDRListFree(s->init_data->cidr_src);
+
         SCFree(s->init_data->buffers);
         SCFree(s->init_data);
         s->init_data = NULL;
index 3bd1eb04978e7c38cf78d14be3291b633c99efb6..1d3d8ceb94818152700335ec61bde7c4450026a7 100644 (file)
@@ -872,10 +872,10 @@ int IPOnlySigParseAddress(const DetectEngineCtx *de_ctx,
     if (flag == 0) {
         if (strcasecmp(addrstr, "any") == 0) {
             s->flags |= SIG_FLAG_SRC_ANY;
-            if (IPOnlyCIDRListParse(de_ctx, &s->cidr_src, "[0.0.0.0/0,::/0]") < 0)
+            if (IPOnlyCIDRListParse(de_ctx, &s->init_data->cidr_src, "[0.0.0.0/0,::/0]") < 0)
                 goto error;
 
-        } else if (IPOnlyCIDRListParse(de_ctx, &s->cidr_src, (char *)addrstr) < 0) {
+        } else if (IPOnlyCIDRListParse(de_ctx, &s->init_data->cidr_src, (char *)addrstr) < 0) {
             goto error;
         }
 
@@ -883,10 +883,10 @@ int IPOnlySigParseAddress(const DetectEngineCtx *de_ctx,
     } else {
         if (strcasecmp(addrstr, "any") == 0) {
             s->flags |= SIG_FLAG_DST_ANY;
-            if (IPOnlyCIDRListParse(de_ctx, &s->cidr_dst, "[0.0.0.0/0,::/0]") < 0)
+            if (IPOnlyCIDRListParse(de_ctx, &s->init_data->cidr_dst, "[0.0.0.0/0,::/0]") < 0)
                 goto error;
 
-        } else if (IPOnlyCIDRListParse(de_ctx, &s->cidr_dst, (char *)addrstr) < 0) {
+        } else if (IPOnlyCIDRListParse(de_ctx, &s->init_data->cidr_dst, (char *)addrstr) < 0) {
             goto error;
         }
 
@@ -1567,23 +1567,23 @@ void IPOnlyAddSignature(DetectEngineCtx *de_ctx, DetectEngineIPOnlyCtx *io_ctx,
     SCLogDebug("Adding IPs from rule: %" PRIu32 " (%s) as %" PRIu32 " mapped to %" PRIu32 "\n",
             s->id, s->msg, s->num, mapped_signum);
     /* Set the internal signum to the list before merging */
-    IPOnlyCIDRListSetSigNum(s->cidr_src, mapped_signum);
+    IPOnlyCIDRListSetSigNum(s->init_data->cidr_src, mapped_signum);
 
-    IPOnlyCIDRListSetSigNum(s->cidr_dst, mapped_signum);
+    IPOnlyCIDRListSetSigNum(s->init_data->cidr_dst, mapped_signum);
 
     /**
      * ipv4 and ipv6 are mixed, but later we will separate them into
      * different trees
      */
-    io_ctx->ip_src = IPOnlyCIDRItemInsert(io_ctx->ip_src, s->cidr_src);
-    io_ctx->ip_dst = IPOnlyCIDRItemInsert(io_ctx->ip_dst, s->cidr_dst);
+    io_ctx->ip_src = IPOnlyCIDRItemInsert(io_ctx->ip_src, s->init_data->cidr_src);
+    io_ctx->ip_dst = IPOnlyCIDRItemInsert(io_ctx->ip_dst, s->init_data->cidr_dst);
 
     if (mapped_signum > io_ctx->max_idx)
         io_ctx->max_idx = mapped_signum;
 
     /** no longer ref to this, it's in the table now */
-    s->cidr_src = NULL;
-    s->cidr_dst = NULL;
+    s->init_data->cidr_src = NULL;
+    s->init_data->cidr_dst = NULL;
 }
 
 #ifdef UNITTESTS
index e1c073efd6a3a228f76207a9f5b475d440f63d54..c297caecbcf9673bf9ac29c55c4a7e01a4b51856 100644 (file)
@@ -1645,12 +1645,6 @@ void SigFree(DetectEngineCtx *de_ctx, Signature *s)
     if (s == NULL)
         return;
 
-    if (s->cidr_dst != NULL)
-        IPOnlyCIDRListFree(s->cidr_dst);
-
-    if (s->cidr_src != NULL)
-        IPOnlyCIDRListFree(s->cidr_src);
-
     int i;
 
     if (s->init_data && s->init_data->transforms.cnt) {
@@ -1681,6 +1675,12 @@ void SigFree(DetectEngineCtx *de_ctx, Signature *s)
                 sm = nsm;
             }
         }
+        if (s->init_data->cidr_dst != NULL)
+            IPOnlyCIDRListFree(s->init_data->cidr_dst);
+
+        if (s->init_data->cidr_src != NULL)
+            IPOnlyCIDRListFree(s->init_data->cidr_src);
+
         SCFree(s->init_data->buffers);
         s->init_data->buffers = NULL;
     }
index 76c6d2b66f036261d2e1d058fa35fbce086c1864..1c2fc3d50a8546fd5afea0bb3225e62cfb32a38e 100644 (file)
@@ -547,6 +547,9 @@ typedef struct SignatureInitData_ {
     /* used at init to determine max dsize */
     SigMatch *dsize_sm;
 
+    /** netblocks and hosts specified at the sid, in CIDR format */
+    IPOnlyCIDRItem *cidr_src, *cidr_dst;
+
     /* list id for `mpm_sm`. Should always match `SigMatchListSMBelongsTo(s, mpm_sm)`. */
     int mpm_sm_list;
     /* the fast pattern added from this signature */
@@ -633,9 +636,6 @@ typedef struct Signature_ {
     uint16_t profiling_id;
 #endif
 
-    /** netblocks and hosts specified at the sid, in CIDR format */
-    IPOnlyCIDRItem *cidr_src, *cidr_dst;
-
     DetectEngineAppInspectionEngine *app_inspect;
     DetectEnginePktInspectionEngine *pkt_inspect;
     DetectEngineFrameInspectionEngine *frame_inspect;