]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fuzz-journal-remote: fix potential fd-leak 26877/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 18 Mar 2023 11:29:27 +0000 (20:29 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 18 Mar 2023 11:29:56 +0000 (20:29 +0900)
src/journal-remote/fuzz-journal-remote.c

index ac71a33f7bc6ba9c3ce19b535df8477c5d33c1d1..ab4e731000cb079e7fd4f850646fb8f4a4dc9860 100644 (file)
 #include "tmpfile-util.h"
 
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
-        int fdin;
-        void *mem;
-        _cleanup_close_ int fdout = -EBADF;
+        _cleanup_close_ int fdin_close = -EBADF, fdout = -EBADF;
         _cleanup_(rm_rf_physical_and_freep) char *tmp = NULL;
         _cleanup_(unlink_and_freep) char *name = NULL;
         _cleanup_(sd_journal_closep) sd_journal *j = NULL;
         _cleanup_(journal_remote_server_destroy) RemoteServer s = {};
-        int r;
+        void *mem;
+        int fdin, r;
 
         if (outside_size_range(size, 3, 65536))
                 return 0;
@@ -37,7 +36,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         assert_se(mkdtemp_malloc("/tmp/fuzz-journal-remote-XXXXXX", &tmp) >= 0);
         assert_se(name = path_join(tmp, "fuzz-journal-remote.XXXXXX.journal"));
 
-        fdin = memfd_new_and_map("fuzz-journal-remote", size, &mem);
+        fdin = fdin_close = memfd_new_and_map("fuzz-journal-remote", size, &mem);
         if (fdin < 0)
                 return log_error_errno(fdin, "memfd_new_and_map() failed: %m");
 
@@ -57,10 +56,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         }
 
         r = journal_remote_add_source(&s, fdin, (char*) "fuzz-data", false);
-        if (r < 0) {
-                safe_close(fdin);
+        if (r < 0)
                 return r;
-        }
+        TAKE_FD(fdin_close);
         assert(r > 0);
 
         while (s.active)