]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
runmodes: introduce unknown engine mode 8791/head
authorLukas Sismis <lsismis@oisf.net>
Fri, 31 Mar 2023 12:34:38 +0000 (14:34 +0200)
committerVictor Julien <vjulien@oisf.net>
Mon, 1 May 2023 14:40:29 +0000 (16:40 +0200)
Querying an engine mode with an unknown value signals a bug when
the engine mode has not been determined but is already queried by
other functions.

Ticket: #5959

src/runmode-unittests.c
src/suricata.c
src/suricata.h
src/tests/fuzz/fuzz_applayerprotodetectgetproto.c
src/tests/fuzz/fuzz_siginit.c

index 41f2b13283a50535b3da08274841408b0c469bae..22571f3aa330f00e1585f01d1e7fa6965aad6fa1 100644 (file)
@@ -232,6 +232,7 @@ void RunUnittests(int list_unittests, const char *regex_arg)
 #ifdef UNITTESTS
     /* Initializations for global vars, queues, etc (memsets, mutex init..) */
     GlobalsInitPreConfig();
+    EngineModeSetIDS();
 
 #ifdef HAVE_LUAJIT
     if (LuajitSetupStatesPool() != 0) {
index f2127d1a2e23c1b99512ac64dea7d6e530e950a6..78c92e0ae798ed13b6d8fc01418980a6793e56a2 100644 (file)
@@ -169,7 +169,7 @@ int run_mode = RUNMODE_UNKNOWN;
 
 /** Engine mode: inline (ENGINE_MODE_IPS) or just
   * detection mode (ENGINE_MODE_IDS by default) */
-static enum EngineMode g_engine_mode = ENGINE_MODE_IDS;
+static enum EngineMode g_engine_mode = ENGINE_MODE_UNKNOWN;
 
 /** Host mode: set if box is sniffing only
  * or is a router */
@@ -209,13 +209,20 @@ int SuriHasSigFile(void)
     return (suricata.sig_file != NULL);
 }
 
+int EngineModeIsUnknown(void)
+{
+    return (g_engine_mode == ENGINE_MODE_UNKNOWN);
+}
+
 int EngineModeIsIPS(void)
 {
+    DEBUG_VALIDATE_BUG_ON(g_engine_mode == ENGINE_MODE_UNKNOWN);
     return (g_engine_mode == ENGINE_MODE_IPS);
 }
 
 int EngineModeIsIDS(void)
 {
+    DEBUG_VALIDATE_BUG_ON(g_engine_mode == ENGINE_MODE_UNKNOWN);
     return (g_engine_mode == ENGINE_MODE_IDS);
 }
 
@@ -2676,6 +2683,11 @@ int PostConfLoadedSetup(SCInstance *suri)
     RunModeEngineIsIPS(
             suricata.run_mode, suricata.runmode_custom_mode, suricata.capture_plugin_name);
 
+    if (EngineModeIsUnknown()) { // if still uninitialized, set the default
+        SCLogInfo("Setting engine mode to IDS mode by default");
+        EngineModeSetIDS();
+    }
+
     SetMasterExceptionPolicy();
 
     AppLayerSetup();
index 20c31c868243c14f64f75bbfae3c096a4102cf2a..64805476fef2988412cccf23a52de073ba7b268f 100644 (file)
@@ -99,12 +99,14 @@ enum {
 
 /* Engine is acting as */
 enum EngineMode {
+    ENGINE_MODE_UNKNOWN,
     ENGINE_MODE_IDS,
     ENGINE_MODE_IPS,
 };
 
 void EngineModeSetIPS(void);
 void EngineModeSetIDS(void);
+int EngineModeIsUnknown(void);
 int EngineModeIsIPS(void);
 int EngineModeIsIDS(void);
 
index 6106a5905e7c992edb23865ba896b5b9a035a748..8e2da4b27b9abe20fd1bc9a38f5ecb896d8c5af5 100644 (file)
@@ -45,6 +45,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
         }
         MpmTableSetup();
         SpmTableSetup();
+        EngineModeSetIDS();
         AppLayerProtoDetectSetup();
         AppLayerParserSetup();
         AppLayerParserRegisterProtocolParsers();
index 0fb46d90405cb99a942f299ef2a016eed63577e4..e649eb070d491173fb4abcc2a8df0a4ed3c77f8a 100644 (file)
@@ -26,6 +26,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
         run_mode = RUNMODE_UNITTEST;
         MpmTableSetup();
         SpmTableSetup();
+        EngineModeSetIDS();
         SigTableSetup();
         SCReferenceConfInit();
         SCClassConfInit();