From: Karel Zak Date: Tue, 1 Dec 2020 10:35:02 +0000 (+0100) Subject: fuzzers: make tests setup more robust X-Git-Tag: v2.37-rc1~263 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cd588d665308dd52d3911e1ee2768ec57ab2efc9;p=thirdparty%2Futil-linux.git fuzzers: make tests setup more robust - use robust functions like write_all() - don't use assert() to check write/open/etc return values, because oss-fuzz.com report foreign (system, libc, ...) issues as our fails Addresses: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=28009 Signed-off-by: Karel Zak --- diff --git a/libfdisk/src/script.c b/libfdisk/src/script.c index ab2c8951b8..6e6f263218 100644 --- a/libfdisk/src/script.c +++ b/libfdisk/src/script.c @@ -1563,23 +1563,24 @@ int fdisk_apply_script(struct fdisk_context *cxt, struct fdisk_script *dp) } #ifdef FUZZ_TARGET +# include "all-io.h" + int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { char name[] = "/tmp/test-script-fuzz.XXXXXX"; int fd; - ssize_t n; struct fdisk_script *dp; struct fdisk_context *cxt; FILE *f; fd = mkostemp(name, O_RDWR|O_CREAT|O_EXCL|O_CLOEXEC); - assert(fd >= 0); - - n = write(fd, data, size); - assert(n == (ssize_t) size); - + if (fd < 0) + err(EXIT_FAILURE, "mkostemp() failed"); + if (write_all(fd, data, size) != 0) + err(EXIT_FAILURE, "write() failed"); f = fopen(name, "r"); - assert(f); + if (!f) + err(EXIT_FAILURE, "cannot open %s", name); cxt = fdisk_new_context(); dp = fdisk_new_script(cxt); diff --git a/libmount/src/fuzz.c b/libmount/src/fuzz.c index 72a52c277d..e845016a0a 100644 --- a/libmount/src/fuzz.c +++ b/libmount/src/fuzz.c @@ -1,6 +1,8 @@ #include "fuzz.h" +#include "xalloc.h" #include "mountP.h" +#include #include #include @@ -12,10 +14,12 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { return 0; tb = mnt_new_table(); - assert(tb); + if (!tb) + err_oom(); f = fmemopen((char*) data, size, "re"); - assert(f); + if (!f) + err(EXIT_FAILURE, "fmemopen() failed"); mnt_table_enable_comments(tb, TRUE); (void) mnt_table_parse_stream(tb, f, "mountinfo"); diff --git a/login-utils/last.c b/login-utils/last.c index 4a90bad282..f3272caebd 100644 --- a/login-utils/last.c +++ b/login-utils/last.c @@ -923,6 +923,8 @@ static void process_wtmp_file(const struct last_control *ctl, } #ifdef FUZZ_TARGET +# include "all-io.h" + int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { struct last_control ctl = { .showhost = TRUE, @@ -936,13 +938,12 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { }; char name[] = "/tmp/test-last-fuzz.XXXXXX"; int fd; - ssize_t n; fd = mkostemp(name, O_RDWR|O_CREAT|O_EXCL|O_CLOEXEC); - assert(fd >= 0); - - n = write(fd, data, size); - assert(n == (ssize_t) size); + if (fd < 0) + err(EXIT_FAILURE, "mkostemp() failed"); + if (write_all(fd, data, size) != 0) + err(EXIT_FAILURE, "write() failed"); process_wtmp_file(&ctl, name);