]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/core/fuzz-manager-serialize.c
fuzz: limit size for fuzz-manager-serialize
[thirdparty/systemd.git] / src / core / fuzz-manager-serialize.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2
3 #include <stdio.h>
4
5 #include "alloc-util.h"
6 #include "fd-util.h"
7 #include "fuzz.h"
8 #include "manager-serialize.h"
9 #include "manager.h"
10 #include "service.h"
11
12 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
13 _cleanup_(manager_freep) Manager *m = NULL;
14 _cleanup_fclose_ FILE *f = NULL, *null = NULL;
15 _cleanup_fdset_free_ FDSet *fdset = NULL;
16
17 if (outside_size_range(size, 0, 65536))
18 return 0;
19
20 /* We don't want to fill the logs with messages about parse errors.
21 * Disable most logging if not running standalone. */
22 if (!getenv("SYSTEMD_LOG_LEVEL")) {
23 log_set_max_level(LOG_CRIT);
24 log_set_target(LOG_TARGET_NULL);
25 }
26
27 assert_se(manager_new(RUNTIME_SCOPE_SYSTEM, MANAGER_TEST_RUN_MINIMAL, &m) >= 0);
28 /* Set log overrides as well to make it harder for a serialization file
29 * to switch log levels/targets during fuzzing */
30 manager_override_log_level(m, log_get_max_level());
31 manager_override_log_target(m, log_get_target());
32 assert_se(null = fopen("/dev/null", "we"));
33 assert_se(fdset = fdset_new());
34 assert_se(f = data_to_file(data, size));
35
36 (void) manager_deserialize(m, f, fdset);
37 (void) manager_serialize(m, null, fdset, true);
38 (void) manager_serialize(m, null, fdset, false);
39
40 return 0;
41 }