LCOV - code coverage report
Current view: top level - fuzz - fuzz-journal-remote.c (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 0 35 0.0 %
Date: 2019-08-23 13:36:53 Functions: 0 1 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 40 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: LGPL-2.1+ */
       2                 :            : 
       3                 :            : #include "fuzz.h"
       4                 :            : 
       5                 :            : #include <sys/mman.h>
       6                 :            : 
       7                 :            : #include "sd-journal.h"
       8                 :            : 
       9                 :            : #include "env-util.h"
      10                 :            : #include "fd-util.h"
      11                 :            : #include "fileio.h"
      12                 :            : #include "fs-util.h"
      13                 :            : #include "journal-remote.h"
      14                 :            : #include "logs-show.h"
      15                 :            : #include "memfd-util.h"
      16                 :            : #include "strv.h"
      17                 :            : 
      18                 :          0 : int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
      19                 :          0 :         _cleanup_fclose_ FILE *dev_null = NULL;
      20                 :          0 :         RemoteServer s = {};
      21                 :          0 :         char name[] = "/tmp/fuzz-journal-remote.XXXXXX.journal";
      22                 :            :         void *mem;
      23                 :            :         int fdin; /* will be closed by journal_remote handler after EOF */
      24                 :          0 :         _cleanup_close_ int fdout = -1;
      25                 :            :         sd_journal *j;
      26                 :            :         OutputMode mode;
      27                 :            :         int r;
      28                 :            : 
      29         [ #  # ]:          0 :         if (size <= 2)
      30                 :          0 :                 return 0;
      31                 :            : 
      32         [ #  # ]:          0 :         if (!getenv("SYSTEMD_LOG_LEVEL"))
      33                 :          0 :                 log_set_max_level(LOG_CRIT);
      34                 :            : 
      35         [ #  # ]:          0 :         assert_se((fdin = memfd_new_and_map("fuzz-journal-remote", size, &mem)) >= 0);
      36                 :          0 :         memcpy(mem, data, size);
      37         [ #  # ]:          0 :         assert_se(munmap(mem, size) == 0);
      38                 :            : 
      39                 :          0 :         fdout = mkostemps(name, STRLEN(".journal"), O_CLOEXEC);
      40         [ #  # ]:          0 :         assert_se(fdout >= 0);
      41                 :            : 
      42                 :            :         /* In */
      43                 :            : 
      44         [ #  # ]:          0 :         assert_se(journal_remote_server_init(&s, name, JOURNAL_WRITE_SPLIT_NONE, false, false) >= 0);
      45                 :            : 
      46         [ #  # ]:          0 :         assert_se(journal_remote_add_source(&s, fdin, (char*) "fuzz-data", false) > 0);
      47                 :            : 
      48         [ #  # ]:          0 :         while (s.active) {
      49                 :          0 :                 r = journal_remote_handle_raw_source(NULL, fdin, 0, &s);
      50         [ #  # ]:          0 :                 assert_se(r >= 0);
      51                 :            :         }
      52                 :            : 
      53                 :          0 :         journal_remote_server_destroy(&s);
      54   [ #  #  #  # ]:          0 :         assert_se(close(fdin) < 0 && errno == EBADF); /* Check that the fd is closed already */
      55                 :            : 
      56                 :            :         /* Out */
      57                 :            : 
      58                 :          0 :         r = sd_journal_open_files(&j, (const char**) STRV_MAKE(name), 0);
      59         [ #  # ]:          0 :         assert_se(r >= 0);
      60                 :            : 
      61         [ #  # ]:          0 :         if (getenv_bool("SYSTEMD_FUZZ_OUTPUT") <= 0)
      62         [ #  # ]:          0 :                 assert_se(dev_null = fopen("/dev/null", "we"));
      63                 :            : 
      64         [ #  # ]:          0 :         for (mode = 0; mode < _OUTPUT_MODE_MAX; mode++) {
      65         [ #  # ]:          0 :                 if (!dev_null)
      66         [ #  # ]:          0 :                         log_info("/* %s */", output_mode_to_string(mode));
      67         [ #  # ]:          0 :                 r = show_journal(dev_null ?: stdout, j, mode, 0, 0, -1, 0, NULL);
      68         [ #  # ]:          0 :                 assert_se(r >= 0);
      69                 :            : 
      70                 :          0 :                 r = sd_journal_seek_head(j);
      71         [ #  # ]:          0 :                 assert_se(r >= 0);
      72                 :            :         }
      73                 :            : 
      74                 :          0 :         sd_journal_close(j);
      75                 :          0 :         unlink(name);
      76                 :            : 
      77                 :          0 :         return 0;
      78                 :            : }

Generated by: LCOV version 1.14