fuzz: unify logging setup

Make sure we don't log anything when running in "fuzzing" mode. Also,
when at it, unify the setup logic into a helper, pretty similar to
the test_setup_logging() one.

Addresses:
  - https://github.com/systemd/systemd/pull/29558#pullrequestreview-1676060607
  - https://github.com/systemd/systemd/pull/29558#discussion_r1358940663
This commit is contained in:
Frantisek Sumsal
2023-10-19 10:05:20 +01:00
committed by Luca Boccassi
parent 47174dc054
commit 4820c9d417
43 changed files with 60 additions and 99 deletions
+1 -6
View File
@@ -82,12 +82,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
_cleanup_fclose_ FILE *f = 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);
}
fuzz_setup_logging();
assert_se(fdset = fdset_new());
assert_se(f = data_to_file(data, size));
+1 -6
View File
@@ -17,12 +17,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (outside_size_range(size, 0, 65536))
return 0;
/* 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);
}
fuzz_setup_logging();
assert_se(manager_new(RUNTIME_SCOPE_SYSTEM, MANAGER_TEST_RUN_MINIMAL|MANAGER_TEST_DONT_OPEN_EXECUTOR, &m) >= 0);
/* Set log overrides as well to make it harder for a serialization file
+1 -4
View File
@@ -60,10 +60,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
assert_se(fseek(f, offset, SEEK_SET) == 0);
/* 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);
fuzz_setup_logging();
assert_se(manager_new(RUNTIME_SCOPE_SYSTEM, MANAGER_TEST_RUN_MINIMAL|MANAGER_TEST_DONT_OPEN_EXECUTOR, &m) >= 0);
+1 -3
View File
@@ -87,9 +87,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (outside_size_range(size, 0, 65536))
return 0;
/* Disable most logging if not running standalone */
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
assert_se(datadup = memdup_suffix0(data, size));
+2
View File
@@ -9,6 +9,8 @@
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
_cleanup_free_ char *unescaped = NULL, *escaped = NULL;
fuzz_setup_logging();
unescaped = bus_label_unescape_n((const char*)data, size);
assert_se(unescaped != NULL);
escaped = bus_label_escape(unescaped);
+1 -2
View File
@@ -12,8 +12,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
_cleanup_free_ char *str = NULL;
int r;
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
assert_se(str = memdup_suffix0(data, size));
+1 -2
View File
@@ -11,8 +11,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
_cleanup_close_ int fd = -EBADF;
_cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL;
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
assert_se(h = ordered_hashmap_new(&catalog_hash_ops));
+1 -4
View File
@@ -29,10 +29,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
int alg = h->alg;
/* 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);
fuzz_setup_logging();
log_info("Using compression %s, data size=%zu",
compression_to_string(alg),
+1 -4
View File
@@ -18,10 +18,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
f = data_to_file(data, size);
assert_se(f);
/* 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);
fuzz_setup_logging();
(void) load_env_file(f, NULL, &rl);
assert_se(fseek(f, 0, SEEK_SET) == 0);
+1 -4
View File
@@ -12,10 +12,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
f = data_to_file(data, size);
assert_se(f);
/* 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);
fuzz_setup_logging();
(void) read_etc_hostname_stream(f, &ret);
+1 -3
View File
@@ -14,9 +14,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
FILE *g = NULL;
int r;
/* Disable most logging if not running standalone */
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
f = data_to_file(data, size);
assert_se(f);
+1 -2
View File
@@ -9,8 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
_cleanup_free_ char *str = NULL;
usec_t usec;
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
assert_se(str = memdup_suffix0(data, size));
+1 -2
View File
@@ -12,8 +12,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
_cleanup_(unlink_tempfilep) char filename[] = "/tmp/fuzz-udev-database.XXXXXX";
_cleanup_fclose_ FILE *f = NULL;
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
assert_se(fmkostemp_safe(filename, "r+", &f) == 0);
if (size != 0)
+1 -3
View File
@@ -14,9 +14,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
_cleanup_free_ char *str = NULL, *dump = NULL;
int r;
log_set_max_level(LOG_CRIT);
log_parse_environment();
(void) log_open();
fuzz_setup_logging();
assert_se(str = memdup_suffix0(data, size));
+1 -2
View File
@@ -92,8 +92,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
_cleanup_(varlink_flush_close_unrefp) Varlink *c = NULL;
_cleanup_(sd_event_unrefp) sd_event *e = NULL;
log_set_max_level(LOG_CRIT);
log_parse_environment();
fuzz_setup_logging();
assert_se(null = fopen("/dev/null", "we"));
+8
View File
@@ -28,5 +28,13 @@ static inline bool outside_size_range(size_t size, size_t lower, size_t upper) {
return false;
}
static inline void fuzz_setup_logging(void) {
/* We don't want to fill the logs and slow down stuff when running
* in a fuzzing mode, so disable most of the logging. */
log_set_max_level(LOG_CRIT);
log_parse_environment();
log_open();
}
/* Force value to not be optimized away. */
#define DO_NOT_OPTIMIZE(value) ({ asm volatile("" : : "g"(value) : "memory"); })
+1 -2
View File
@@ -30,8 +30,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (outside_size_range(size, 3, 65536))
return 0;
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_ERR);
fuzz_setup_logging();
assert_se(mkdtemp_malloc("/tmp/fuzz-journal-remote-XXXXXX", &tmp) >= 0);
assert_se(name = path_join(tmp, "fuzz-journal-remote.XXXXXX.journal"));
+2
View File
@@ -7,6 +7,8 @@
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
Server s;
fuzz_setup_logging();
dummy_server_init(&s, data, size);
process_audit_string(&s, 0, s.buffer, size);
server_done(&s);
+1 -4
View File
@@ -10,10 +10,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (size == 0)
return 0;
/* We don't want to fill the logs with assert warnings.
* Disable most logging if not running standalone */
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
dummy_server_init(&s, data, size);
dev_kmsg_record(&s, s.buffer, size);
+1 -2
View File
@@ -18,8 +18,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
struct ucred ucred;
struct timeval *tv = NULL;
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
dummy_server_init(&s, NULL, 0);
+2
View File
@@ -5,6 +5,8 @@
#include "journald-native.h"
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
fuzz_setup_logging();
fuzz_journald_processing_function(data, size, server_process_native_message);
return 0;
}
+1 -2
View File
@@ -19,8 +19,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (outside_size_range(size, 1, 65536))
return 0;
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
assert_se(socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0, stream_fds) >= 0);
dummy_server_init(&s, NULL, 0);
+2
View File
@@ -5,6 +5,8 @@
#include "journald-syslog.h"
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
fuzz_setup_logging();
fuzz_journald_processing_function(data, size, server_process_syslog_message);
return 0;
}
+1 -2
View File
@@ -56,8 +56,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
assert_se(setenv("SYSTEMD_NETWORK_TEST_MODE", "1", 1) >= 0);
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
r = sd_dhcp_client_new(&client, false);
assert_se(r >= 0);
@@ -25,6 +25,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (size < sizeof(DHCPMessage))
return 0;
fuzz_setup_logging();
assert_se(sd_dhcp_server_new(&server, 1) >= 0);
assert_se(sd_dhcp_server_attach_event(server, NULL, 0) >= 0);
assert_se(sd_dhcp_server_configure_pool(server, &address, 24, 0, 0) >= 0);
@@ -78,6 +78,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (size < sizeof(DHCPMessage))
return 0;
fuzz_setup_logging();
assert_se(duped = memdup(data, size));
assert_se(sd_dhcp_server_new(&server, 1) >= 0);
+1 -2
View File
@@ -75,8 +75,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
assert_se(setenv("SYSTEMD_NETWORK_TEST_MODE", "1", 1) >= 0);
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
if (outside_size_range(size, 0, 65536))
return 0;
+2
View File
@@ -26,6 +26,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (outside_size_range(size, 0, 2048))
return 0;
fuzz_setup_logging();
assert_se(sd_event_new(&e) == 0);
assert_se(sd_lldp_rx_new(&lldp_rx) >= 0);
assert_se(sd_lldp_rx_set_ifindex(lldp_rx, 42) >= 0);
+2
View File
@@ -23,6 +23,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (outside_size_range(size, 0, 2048))
return 0;
fuzz_setup_logging();
assert_se(sd_event_new(&e) >= 0);
assert_se(sd_ndisc_new(&nd) >= 0);
assert_se(sd_ndisc_attach_event(nd, e, 0) >= 0);
+1 -4
View File
@@ -18,10 +18,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (outside_size_range(size, 0, 65536))
return 0;
/* 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);
fuzz_setup_logging();
r = sd_bus_new(&bus);
assert_se(r >= 0);
+1 -4
View File
@@ -17,10 +17,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
FILE *g = NULL;
int r;
/* 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);
fuzz_setup_logging();
r = sd_bus_new(&bus);
assert_se(r >= 0);
+1 -2
View File
@@ -14,8 +14,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (outside_size_range(size, 0, 65536))
return 0;
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
assert_se(fmkostemp_safe(netdev_config, "r+", &f) == 0);
if (size != 0)
+1 -2
View File
@@ -14,8 +14,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (outside_size_range(size, 0, 65536))
return 0;
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
assert_se(fmkostemp_safe(network_config, "r+", &f) == 0);
if (size != 0)
+1 -4
View File
@@ -15,10 +15,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
f = data_to_file(data, size);
assert_se(f);
/* 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);
fuzz_setup_logging();
(void) oci_load(f, "/dev/null", &s);
+1 -4
View File
@@ -15,10 +15,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
f = data_to_file(data, size);
assert_se(f);
/* 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);
fuzz_setup_logging();
(void) settings_load(f, "/dev/null", &s);
+2
View File
@@ -10,6 +10,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (outside_size_range(size, 0, DNS_PACKET_SIZE_MAX))
return 0;
fuzz_setup_logging();
assert_se(dns_packet_new(&p, DNS_PROTOCOL_DNS, 0, DNS_PACKET_SIZE_MAX) >= 0);
p->size = 0; /* by default append starts after the header, undo that */
assert_se(dns_packet_append_blob(p, data, size, NULL) >= 0);
+1 -2
View File
@@ -8,8 +8,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
_cleanup_fclose_ FILE *f = NULL;
_cleanup_(etc_hosts_clear) EtcHosts h = {};
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
f = data_to_file(data, size);
assert_se(f);
+2
View File
@@ -18,6 +18,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (dns_resource_record_new_from_raw(&rr, data, size) < 0)
return 0;
fuzz_setup_logging();
assert_se(copy = dns_resource_record_copy(rr));
assert_se(dns_resource_record_equal(copy, rr) > 0);
+1 -4
View File
@@ -22,10 +22,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (size > 16*1024)
return 0; /* See the comment below about the limit for strv_length(). */
/* 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);
fuzz_setup_logging();
arg_pager_flags = PAGER_DISABLE; /* We shouldn't execute the pager */
+1 -4
View File
@@ -10,10 +10,7 @@
#include "log.h"
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
/* 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);
fuzz_setup_logging();
if (outside_size_range(size, 0, HID_MAX_DESCRIPTOR_SIZE))
return 0;
+1 -2
View File
@@ -18,8 +18,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (outside_size_range(size, 0, 65536))
return 0;
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
assert_se(fmkostemp_safe(filename, "r+", &f) == 0);
if (size != 0)
+1 -2
View File
@@ -14,8 +14,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (outside_size_range(size, 0, 65536))
return 0;
if (!getenv("SYSTEMD_LOG_LEVEL"))
log_set_max_level(LOG_CRIT);
fuzz_setup_logging();
assert_se(fmkostemp_safe(filename, "r+", &f) == 0);
if (size != 0)
@@ -20,10 +20,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (outside_size_range(size, 0, 65536))
return 0;
/* 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);
fuzz_setup_logging();
assert_se(mkdtemp_malloc("/tmp/fuzz-xdg-desktop-XXXXXX", &tmpdir) >= 0);