]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
fuzzers: make tests setup more robust
authorKarel Zak <kzak@redhat.com>
Tue, 1 Dec 2020 10:35:02 +0000 (11:35 +0100)
committerKarel Zak <kzak@redhat.com>
Tue, 1 Dec 2020 10:35:02 +0000 (11:35 +0100)
- 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 <kzak@redhat.com>
libfdisk/src/script.c
libmount/src/fuzz.c
login-utils/last.c

index ab2c8951b8491dd339534867fdfc000901424b83..6e6f263218007169dfe317c2ca27ea25a4d8044c 100644 (file)
@@ -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);
index 72a52c277d2bb880df7d0a65515f45d374d26981..e845016a0a03398fe397b2dab605618f50d4f5cc 100644 (file)
@@ -1,6 +1,8 @@
 #include "fuzz.h"
+#include "xalloc.h"
 #include "mountP.h"
 
+#include <stdlib.h>
 #include <stddef.h>
 #include <stdint.h>
 
@@ -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");
index 4a90bad282cdc29f41b2f874f39be53afd3e8731..f3272caebde4a663c24edf64e0308cadc918679c 100644 (file)
@@ -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);