/src/systemd/src/network/fuzz-network-parser.c
Line | Count | Source |
1 | | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
2 | | |
3 | | #include "fd-util.h" |
4 | | #include "fuzz.h" |
5 | | #include "networkd-manager.h" |
6 | | #include "tmpfile-util.h" |
7 | | |
8 | 48.6k | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { |
9 | 48.6k | _cleanup_(manager_freep) Manager *manager = NULL; |
10 | 48.6k | _cleanup_fclose_ FILE *f = NULL; |
11 | 48.6k | _cleanup_(unlink_tempfilep) char network_config[] = "/tmp/fuzz-networkd.XXXXXX"; |
12 | | |
13 | 48.6k | if (outside_size_range(size, 0, 65536)) |
14 | 12 | return 0; |
15 | | |
16 | 48.6k | fuzz_setup_logging(); |
17 | | |
18 | 48.6k | assert_se(fmkostemp_safe(network_config, "r+", &f) == 0); |
19 | 48.6k | if (size != 0) |
20 | 48.6k | assert_se(fwrite(data, size, 1, f) == 1); |
21 | | |
22 | 48.6k | fflush(f); |
23 | | assert_se(manager_new(&manager, /* test_mode= */ true) >= 0); |
24 | 48.6k | (void) network_load_one(manager, &manager->networks, network_config); |
25 | 48.6k | return 0; |
26 | 48.6k | } |