diff options
-rw-r--r-- | src/basic/fileio.c | 10 | ||||
-rw-r--r-- | src/basic/fileio.h | 1 | ||||
-rw-r--r-- | src/fuzz/fuzz-bus-message.c | 6 | ||||
-rw-r--r-- | src/fuzz/fuzz-env-file.c | 5 | ||||
-rw-r--r-- | src/fuzz/fuzz-hostname-util.c | 5 | ||||
-rw-r--r-- | src/fuzz/fuzz-json.c | 5 | ||||
-rw-r--r-- | src/fuzz/fuzz-nspawn-oci.c | 5 | ||||
-rw-r--r-- | src/fuzz/fuzz-nspawn-settings.c | 5 | ||||
-rw-r--r-- | src/fuzz/fuzz-unit-file.c | 4 | ||||
-rw-r--r-- | src/libsystemd/sd-bus/test-bus-marshal.c | 7 | ||||
-rw-r--r-- | src/portable/portablectl.c | 4 | ||||
-rw-r--r-- | src/shared/bootspec.c | 2 | ||||
-rw-r--r-- | src/test/test-fileio.c | 8 | ||||
-rw-r--r-- | src/test/test-json.c | 3 |
14 files changed, 40 insertions, 30 deletions
diff --git a/src/basic/fileio.c b/src/basic/fileio.c index 99efc2410c..85a49b1f9e 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -65,6 +65,16 @@ FILE* open_memstream_unlocked(char **ptr, size_t *sizeloc) { return f; } +FILE* fmemopen_unlocked(void *buf, size_t size, const char *mode) { + FILE *f = fmemopen(buf, size, mode); + if (!f) + return NULL; + + (void) __fsetlocking(f, FSETLOCKING_BYCALLER); + + return f; +} + int write_string_stream_ts( FILE *f, const char *line, diff --git a/src/basic/fileio.h b/src/basic/fileio.h index fe5c8277de..ffe900b486 100644 --- a/src/basic/fileio.h +++ b/src/basic/fileio.h @@ -36,6 +36,7 @@ typedef enum { int fopen_unlocked(const char *path, const char *options, FILE **ret); int fdopen_unlocked(int fd, const char *options, FILE **ret); FILE* open_memstream_unlocked(char **ptr, size_t *sizeloc); +FILE* fmemopen_unlocked(void *buf, size_t size, const char *mode); int write_string_stream_ts(FILE *f, const char *line, WriteStringFileFlags flags, struct timespec *ts); static inline int write_string_stream(FILE *f, const char *line, WriteStringFileFlags flags) { diff --git a/src/fuzz/fuzz-bus-message.c b/src/fuzz/fuzz-bus-message.c index 9842c62a6f..aca82edad9 100644 --- a/src/fuzz/fuzz-bus-message.c +++ b/src/fuzz/fuzz-bus-message.c @@ -1,13 +1,11 @@ /* SPDX-License-Identifier: LGPL-2.1+ */ -#include <errno.h> -#include <stdio.h> - #include "alloc-util.h" #include "bus-dump.h" #include "bus-message.h" #include "env-util.h" #include "fd-util.h" +#include "fileio.h" #include "fuzz.h" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { @@ -36,7 +34,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { TAKE_PTR(buffer); if (getenv_bool("SYSTEMD_FUZZ_OUTPUT") <= 0) - assert_se(g = open_memstream(&out, &out_size)); + assert_se(g = open_memstream_unlocked(&out, &out_size)); bus_message_dump(m, g ?: stdout, BUS_MESSAGE_DUMP_WITH_HEADER); diff --git a/src/fuzz/fuzz-env-file.c b/src/fuzz/fuzz-env-file.c index 3c8ffaa7b2..d945dfc02c 100644 --- a/src/fuzz/fuzz-env-file.c +++ b/src/fuzz/fuzz-env-file.c @@ -1,9 +1,10 @@ /* SPDX-License-Identifier: LGPL-2.1+ */ -#include <errno.h> +#include <stdio.h> #include "alloc-util.h" #include "env-file.h" +#include "fileio.h" #include "fd-util.h" #include "fuzz.h" #include "strv.h" @@ -15,7 +16,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (size == 0 || size > 65535) return 0; - f = fmemopen((char*) data, size, "re"); + f = fmemopen_unlocked((char*) data, size, "re"); assert_se(f); /* We don't want to fill the logs with messages about parse errors. diff --git a/src/fuzz/fuzz-hostname-util.c b/src/fuzz/fuzz-hostname-util.c index deaf8112ba..2130a4a811 100644 --- a/src/fuzz/fuzz-hostname-util.c +++ b/src/fuzz/fuzz-hostname-util.c @@ -1,9 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1+ */ -#include <errno.h> - #include "alloc-util.h" #include "fd-util.h" +#include "fileio.h" #include "fuzz.h" #include "hostname-util.h" @@ -14,7 +13,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (size == 0) return 0; - f = fmemopen((char*) data, size, "re"); + f = fmemopen_unlocked((char*) data, size, "re"); assert_se(f); /* We don't want to fill the logs with messages about parse errors. diff --git a/src/fuzz/fuzz-json.c b/src/fuzz/fuzz-json.c index 3aa9d089e6..ce7b69dbb9 100644 --- a/src/fuzz/fuzz-json.c +++ b/src/fuzz/fuzz-json.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1+ */ #include "alloc-util.h" +#include "fileio.h" #include "fd-util.h" #include "fuzz.h" #include "json.h" @@ -14,13 +15,13 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (size == 0) return 0; - f = fmemopen((char*) data, size, "re"); + f = fmemopen_unlocked((char*) data, size, "re"); assert_se(f); if (json_parse_file(f, NULL, &v, NULL, NULL) < 0) return 0; - g = open_memstream(&out, &out_size); + g = open_memstream_unlocked(&out, &out_size); assert_se(g); json_variant_dump(v, 0, g, NULL); diff --git a/src/fuzz/fuzz-nspawn-oci.c b/src/fuzz/fuzz-nspawn-oci.c index f7b59f13ba..004230eafe 100644 --- a/src/fuzz/fuzz-nspawn-oci.c +++ b/src/fuzz/fuzz-nspawn-oci.c @@ -1,9 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1+ */ -#include <errno.h> - #include "alloc-util.h" #include "fd-util.h" +#include "fileio.h" #include "fuzz.h" #include "nspawn-oci.h" @@ -14,7 +13,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (size == 0) return 0; - f = fmemopen((char*) data, size, "re"); + f = fmemopen_unlocked((char*) data, size, "re"); assert_se(f); /* We don't want to fill the logs with messages about parse errors. diff --git a/src/fuzz/fuzz-nspawn-settings.c b/src/fuzz/fuzz-nspawn-settings.c index 6c81eb773a..aa0a8225b4 100644 --- a/src/fuzz/fuzz-nspawn-settings.c +++ b/src/fuzz/fuzz-nspawn-settings.c @@ -1,9 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1+ */ -#include <errno.h> - #include "alloc-util.h" #include "fd-util.h" +#include "fileio.h" #include "fuzz.h" #include "nspawn-settings.h" @@ -14,7 +13,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (size == 0) return 0; - f = fmemopen((char*) data, size, "re"); + f = fmemopen_unlocked((char*) data, size, "re"); assert_se(f); /* We don't want to fill the logs with messages about parse errors. diff --git a/src/fuzz/fuzz-unit-file.c b/src/fuzz/fuzz-unit-file.c index 84b1ea66ec..d3993cf123 100644 --- a/src/fuzz/fuzz-unit-file.c +++ b/src/fuzz/fuzz-unit-file.c @@ -24,7 +24,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (size == 0) return 0; - f = fmemopen((char*) data, size, "re"); + f = fmemopen_unlocked((char*) data, size, "re"); assert_se(f); if (read_line(f, LINE_MAX, &p) < 0) @@ -75,7 +75,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { config_item_perf_lookup, load_fragment_gperf_lookup, CONFIG_PARSE_ALLOW_INCLUDE, u); - g = open_memstream(&out, &out_size); + g = open_memstream_unlocked(&out, &out_size); assert_se(g); unit_dump(u, g, ""); diff --git a/src/libsystemd/sd-bus/test-bus-marshal.c b/src/libsystemd/sd-bus/test-bus-marshal.c index 1e9810ce4f..ade16e532d 100644 --- a/src/libsystemd/sd-bus/test-bus-marshal.c +++ b/src/libsystemd/sd-bus/test-bus-marshal.c @@ -20,6 +20,7 @@ #include "bus-util.h" #include "escape.h" #include "fd-util.h" +#include "fileio.h" #include "log.h" #include "tests.h" #include "util.h" @@ -189,7 +190,7 @@ int main(int argc, char *argv[]) { bus_message_dump(m, stdout, BUS_MESSAGE_DUMP_WITH_HEADER); - ms = open_memstream(&first, &first_size); + ms = open_memstream_unlocked(&first, &first_size); bus_message_dump(m, ms, 0); fflush(ms); assert_se(!ferror(ms)); @@ -245,7 +246,7 @@ int main(int argc, char *argv[]) { bus_message_dump(m, stdout, BUS_MESSAGE_DUMP_WITH_HEADER); fclose(ms); - ms = open_memstream(&second, &second_size); + ms = open_memstream_unlocked(&second, &second_size); bus_message_dump(m, ms, 0); fflush(ms); assert_se(!ferror(ms)); @@ -351,7 +352,7 @@ int main(int argc, char *argv[]) { assert_se(r >= 0); fclose(ms); - ms = open_memstream(&third, &third_size); + ms = open_memstream_unlocked(&third, &third_size); bus_message_dump(copy, ms, 0); fflush(ms); assert_se(!ferror(ms)); diff --git a/src/portable/portablectl.c b/src/portable/portablectl.c index bb6cebdf16..2c59f04eb5 100644 --- a/src/portable/portablectl.c +++ b/src/portable/portablectl.c @@ -12,6 +12,7 @@ #include "dirent-util.h" #include "env-file.h" #include "fd-util.h" +#include "fileio.h" #include "format-table.h" #include "fs-util.h" #include "locale-util.h" @@ -272,10 +273,9 @@ static int inspect_image(int argc, char *argv[], void *userdata) { nl = true; } else { _cleanup_free_ char *pretty_portable = NULL, *pretty_os = NULL; - _cleanup_fclose_ FILE *f; - f = fmemopen((void*) data, sz, "re"); + f = fmemopen_unlocked((void*) data, sz, "re"); if (!f) return log_error_errno(errno, "Failed to open /etc/os-release buffer: %m"); diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c index 3bd14d7372..b2f8936038 100644 --- a/src/shared/bootspec.c +++ b/src/shared/bootspec.c @@ -298,7 +298,7 @@ static int boot_entry_load_unified( if (!k) return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Path is not below root: %s", path); - f = fmemopen((void*) osrelease, strlen(osrelease), "r"); + f = fmemopen_unlocked((void*) osrelease, strlen(osrelease), "r"); if (!f) return log_error_errno(errno, "Failed to open os-release buffer: %m"); diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c index 2ff5b9a69d..cd1db3dd62 100644 --- a/src/test/test-fileio.c +++ b/src/test/test-fileio.c @@ -637,7 +637,7 @@ static void test_fgetc(void) { _cleanup_fclose_ FILE *f = NULL; char c; - f = fmemopen((void*) chars, sizeof(chars), "re"); + f = fmemopen_unlocked((void*) chars, sizeof(chars), "re"); assert_se(f); for (unsigned i = 0; i < sizeof(chars); i++) { @@ -727,7 +727,7 @@ static void test_read_line_one_file(FILE *f) { static void test_read_line(void) { _cleanup_fclose_ FILE *f = NULL; - f = fmemopen((void*) buffer, sizeof(buffer), "re"); + f = fmemopen_unlocked((void*) buffer, sizeof(buffer), "re"); assert_se(f); test_read_line_one_file(f); @@ -792,7 +792,7 @@ static void test_read_line4(void) { _cleanup_fclose_ FILE *f = NULL; _cleanup_free_ char *s = NULL; - assert_se(f = fmemopen((void*) eof_endings[i].string, eof_endings[i].length, "r")); + assert_se(f = fmemopen_unlocked((void*) eof_endings[i].string, eof_endings[i].length, "r")); r = read_line(f, (size_t) -1, &s); assert_se((size_t) r == eof_endings[i].length); @@ -813,7 +813,7 @@ static void test_read_nul_string(void) { _cleanup_fclose_ FILE *f = NULL; _cleanup_free_ char *s = NULL; - assert_se(f = fmemopen((void*) test, sizeof(test)-1, "r")); + assert_se(f = fmemopen_unlocked((void*) test, sizeof(test)-1, "r")); assert_se(read_nul_string(f, LONG_LINE_MAX, &s) == 13 && streq_ptr(s, "string nr. 1")); s = mfree(s); diff --git a/src/test/test-json.c b/src/test/test-json.c index 9b8a2a9422..8bd6a7221c 100644 --- a/src/test/test-json.c +++ b/src/test/test-json.c @@ -4,6 +4,7 @@ #include "alloc-util.h" #include "fd-util.h" +#include "fileio.h" #include "json-internal.h" #include "json.h" #include "string-util.h" @@ -358,7 +359,7 @@ static void test_source(void) { "%s" "--- original end ---\n", data); - assert_se(f = fmemopen((void*) data, strlen(data), "r")); + assert_se(f = fmemopen_unlocked((void*) data, strlen(data), "r")); assert_se(json_parse_file(f, "waldo", &v, NULL, NULL) >= 0); |