summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorFrantisek Sumsal <frantisek@sumsal.cz>2023-05-01 22:41:52 +0200
committerFrantisek Sumsal <frantisek@sumsal.cz>2023-05-03 10:09:53 +0200
commit24e6759cbcd58dfd779f70fa3cf45227dcf8798f (patch)
tree7056af2b470b6f032eee154b779b048e11c1e9a1 /src/core
parent5c519a56f5caf73c5d418563af939974b0af43be (diff)
downloadsystemd-24e6759cbcd58dfd779f70fa3cf45227dcf8798f.tar.gz
test: add a simple fuzzer for manager serialization
Diffstat (limited to 'src/core')
-rw-r--r--src/core/fuzz-manager-serialize.c38
-rw-r--r--src/core/meson.build7
2 files changed, 45 insertions, 0 deletions
diff --git a/src/core/fuzz-manager-serialize.c b/src/core/fuzz-manager-serialize.c
new file mode 100644
index 0000000000..04560341da
--- /dev/null
+++ b/src/core/fuzz-manager-serialize.c
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <stdio.h>
+
+#include "alloc-util.h"
+#include "fd-util.h"
+#include "fuzz.h"
+#include "manager-serialize.h"
+#include "manager.h"
+#include "service.h"
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+ _cleanup_(manager_freep) Manager *m = NULL;
+ _cleanup_fclose_ FILE *f = NULL, *null = NULL;
+ _cleanup_fdset_free_ FDSet *fdset = NULL;
+
+ /* We don't want to fill the logs with messages about parse errors.
+ * Disable most logging if not running standalone. */
+ if (!getenv("SYSTEMD_LOG_LEVEL")) {
+ log_set_max_level(LOG_CRIT);
+ log_set_target(LOG_TARGET_NULL);
+ }
+
+ assert_se(manager_new(RUNTIME_SCOPE_SYSTEM, MANAGER_TEST_RUN_BASIC, &m) >= 0);
+ /* Set log overrides as well to make it harder for a serialization file
+ * to switch log levels/targets during fuzzing */
+ manager_override_log_level(m, log_get_max_level());
+ manager_override_log_target(m, log_get_target());
+ assert_se(null = fopen("/dev/null", "we"));
+ assert_se(fdset = fdset_new());
+ assert_se(f = data_to_file(data, size));
+
+ (void) manager_deserialize(m, f, fdset);
+ (void) manager_serialize(m, null, fdset, true);
+ (void) manager_serialize(m, null, fdset, false);
+
+ return 0;
+}
diff --git a/src/core/meson.build b/src/core/meson.build
index 1a1b8b310d..152b5d4c5d 100644
--- a/src/core/meson.build
+++ b/src/core/meson.build
@@ -192,4 +192,11 @@ fuzzers += [
],
'dependencies' : libmount,
},
+ {
+ 'sources' : files('fuzz-manager-serialize.c'),
+ 'link_with' : [
+ libcore,
+ libshared
+ ],
+ },
]