]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
landlock: handle filestore case 7853/head
authorEric Leblond <el@stamus-networks.com>
Thu, 4 Aug 2022 20:33:52 +0000 (22:33 +0200)
committerVictor Julien <vjulien@oisf.net>
Tue, 13 Sep 2022 08:36:00 +0000 (10:36 +0200)
If landlock ABI is inferior to 2 (before Linux 5.19) then the
renaming of files is impossible if the protection is enabled. This
patch disables landlock if ABI < 2 and file-store is enabled.

As file store is initialized in output the call to landlock had to
done after the output initialization.

src/suricata.c
src/util-landlock.c

index 3f2cdc1051646a8671dc4885e40070bd308b433e..63dfd572da978dbf5ded31fd01cb4dc801d791de 100644 (file)
@@ -2906,8 +2906,6 @@ int SuricataMain(int argc, char **argv)
         exit(EXIT_FAILURE);
     }
 
-    LandlockSandboxing(&suricata);
-
     SCDropMainThreadCaps(suricata.userid, suricata.groupid);
 
     /* Re-enable coredumps after privileges are dropped. */
@@ -2915,6 +2913,8 @@ int SuricataMain(int argc, char **argv)
 
     PreRunPostPrivsDropInit(suricata.run_mode);
 
+    LandlockSandboxing(&suricata);
+
     PostConfLoadedDetectSetup(&suricata);
     if (suricata.run_mode == RUNMODE_ENGINE_ANALYSIS) {
         goto out;
index cc1fadeac2603e966691d308dc90f93fd0d119d6..b0fa2f087df9c1adaf01154f05cead782031d6c0 100644 (file)
 
 #include "suricata.h"
 #include "util-conf.h"
+#include "util-file.h"
 #include "util-landlock.h"
 #include "util-mem.h"
+#include "feature.h"
 
 #ifndef HAVE_LINUX_LANDLOCK_H
 
@@ -100,7 +102,14 @@ static inline struct landlock_ruleset *LandlockCreateRuleset(void)
         return NULL;
     }
     if (abi < 2) {
-        ruleset->attr.handled_access_fs &= ~LANDLOCK_ACCESS_FS_REFER;
+        if (RequiresFeature(FEATURE_OUTPUT_FILESTORE)) {
+            SCLogError(SC_ERR_NOT_SUPPORTED,
+                    "Landlock disabled: need Linux 5.19+ for file store support");
+            SCFree(ruleset);
+            return NULL;
+        } else {
+            ruleset->attr.handled_access_fs &= ~LANDLOCK_ACCESS_FS_REFER;
+        }
     }
 
     ruleset->fd = landlock_create_ruleset(&ruleset->attr, sizeof(ruleset->attr), 0);