]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tests: keep going even if setup_mount_namespace has failed
authorEvgeny Vereshchagin <evvers@ya.ru>
Tue, 27 Nov 2018 11:47:06 +0000 (12:47 +0100)
committerEvgeny Vereshchagin <evvers@ya.ru>
Tue, 27 Nov 2018 11:47:06 +0000 (12:47 +0100)
This should address https://github.com/google/oss-fuzz/issues/1983.

src/fuzz/fuzz-udev-rules.c

index 36c39e1dba04fa082da80b4ef2f3e5cf92b26f0b..5889bbe1a8b93a145a37981201b24961e66f6f3f 100644 (file)
@@ -70,17 +70,25 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
         FILE *f = NULL;
 
+        /* To judge from https://oss-fuzz.com/testcase?key=5642013043589120, unshare/mount can fail.
+         * It isn't critical so let's ignore it for now to see how it goes */
+        (void) setup_mount_namespace();
+
+        assert_se(runtime_dir = setup_fake_runtime_dir());
+
+        if (setup_fake_filesystems(runtime_dir) < 0) {
+#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+                return EXIT_TEST_SKIP;
+#else
+                abort();
+#endif
+        }
+
         if (!getenv("SYSTEMD_LOG_LEVEL")) {
                 log_set_max_level_realm(LOG_REALM_UDEV, LOG_CRIT);
                 log_set_max_level_realm(LOG_REALM_SYSTEMD, LOG_CRIT);
         }
 
-        if (setup_mount_namespace() < 0)
-                return EXIT_TEST_SKIP;
-
-        assert_se(runtime_dir = setup_fake_runtime_dir());
-
-        assert_se(setup_fake_filesystems(runtime_dir) >= 0);
         assert_se(mkdir_p("/etc/udev/rules.d", 0755) >= 0);
         f = fopen("/etc/udev/rules.d/fuzz.rules", "we");
         assert_se(f);