robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 1 | /* |
robert.swiecki@gmail.com | 3b630b4 | 2015-02-16 10:53:53 +0000 | [diff] [blame] | 2 | * |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 3 | * honggfuzz - reporting |
| 4 | * ----------------------------------------- |
robert.swiecki@gmail.com | 3b630b4 | 2015-02-16 10:53:53 +0000 | [diff] [blame] | 5 | * |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 6 | * Author: Robert Swiecki <swiecki@google.com> |
robert.swiecki@gmail.com | 3b630b4 | 2015-02-16 10:53:53 +0000 | [diff] [blame] | 7 | * |
Robert Swiecki | 46288f7 | 2018-02-27 17:28:47 +0100 | [diff] [blame] | 8 | * Copyright 2010-2018 by Google Inc. All Rights Reserved. |
robert.swiecki@gmail.com | 3b630b4 | 2015-02-16 10:53:53 +0000 | [diff] [blame] | 9 | * |
| 10 | * Licensed under the Apache License, Version 2.0 (the "License"); you may |
| 11 | * not use this file except in compliance with the License. You may obtain |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 12 | * a copy of the License at |
robert.swiecki@gmail.com | 3b630b4 | 2015-02-16 10:53:53 +0000 | [diff] [blame] | 13 | * |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 14 | * http://www.apache.org/licenses/LICENSE-2.0 |
robert.swiecki@gmail.com | 3b630b4 | 2015-02-16 10:53:53 +0000 | [diff] [blame] | 15 | * |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 16 | * Unless required by applicable law or agreed to in writing, software |
| 17 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 18 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
| 19 | * implied. See the License for the specific language governing |
| 20 | * permissions and limitations under the License. |
robert.swiecki@gmail.com | 3b630b4 | 2015-02-16 10:53:53 +0000 | [diff] [blame] | 21 | * |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 22 | */ |
| 23 | |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 24 | #include "report.h" |
| 25 | |
Robert Swiecki | af7a92b | 2019-04-17 22:02:53 +0200 | [diff] [blame] | 26 | #include <errno.h> |
robert.swiecki@gmail.com | 90e9911 | 2015-02-15 02:05:14 +0000 | [diff] [blame] | 27 | #include <fcntl.h> |
Jagger | 921bf56 | 2015-09-08 22:05:47 +0200 | [diff] [blame] | 28 | #include <inttypes.h> |
robert.swiecki@gmail.com | 90e9911 | 2015-02-15 02:05:14 +0000 | [diff] [blame] | 29 | #include <stdio.h> |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 30 | #include <sys/stat.h> |
Robert Swiecki | d0fa62c | 2017-09-28 18:11:05 +0200 | [diff] [blame] | 31 | #include <sys/types.h> |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 32 | |
Robert Swiecki | 246af3e | 2018-01-05 14:56:32 +0100 | [diff] [blame] | 33 | #include "libhfcommon/common.h" |
| 34 | #include "libhfcommon/log.h" |
| 35 | #include "libhfcommon/util.h" |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 36 | |
| 37 | static int reportFD = -1; |
| 38 | |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 39 | #if defined(_HF_ARCH_LINUX) |
Robert Swiecki | d50ed42 | 2017-11-13 23:32:26 +0100 | [diff] [blame] | 40 | static void report_printdynFileMethod(run_t* run) { |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 41 | dprintf(reportFD, " dynFileMethod: "); |
Robert Swiecki | a5b918a | 2018-03-07 23:59:53 +0100 | [diff] [blame] | 42 | if (run->global->feedback.dynFileMethod == 0) |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 43 | dprintf(reportFD, "NONE\n"); |
| 44 | else { |
Robert Swiecki | a5b918a | 2018-03-07 23:59:53 +0100 | [diff] [blame] | 45 | if (run->global->feedback.dynFileMethod & _HF_DYNFILE_INSTR_COUNT) |
| 46 | dprintf(reportFD, "INSTR_COUNT "); |
| 47 | if (run->global->feedback.dynFileMethod & _HF_DYNFILE_BRANCH_COUNT) |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 48 | dprintf(reportFD, "BRANCH_COUNT "); |
Robert Swiecki | a5b918a | 2018-03-07 23:59:53 +0100 | [diff] [blame] | 49 | if (run->global->feedback.dynFileMethod & _HF_DYNFILE_BTS_EDGE) |
| 50 | dprintf(reportFD, "BTS_EDGE_COUNT "); |
| 51 | if (run->global->feedback.dynFileMethod & _HF_DYNFILE_IPT_BLOCK) |
Robert Swiecki | 6134ce0 | 2017-06-14 14:58:37 +0200 | [diff] [blame] | 52 | dprintf(reportFD, "IPT_BLOCK_COUNT "); |
Anestis Bechtsoudis | f9f4a85 | 2015-08-18 14:30:02 +0300 | [diff] [blame] | 53 | |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 54 | dprintf(reportFD, "\n"); |
| 55 | } |
| 56 | } |
| 57 | #endif |
| 58 | |
Robert Swiecki | d50ed42 | 2017-11-13 23:32:26 +0100 | [diff] [blame] | 59 | static void report_printTargetCmd(run_t* run) { |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 60 | dprintf(reportFD, " fuzzTarget : "); |
Robert Swiecki | 97d0cee | 2017-12-18 00:17:50 +0100 | [diff] [blame] | 61 | for (int x = 0; run->global->exe.cmdline[x]; x++) { |
| 62 | dprintf(reportFD, "%s ", run->global->exe.cmdline[x]); |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 63 | } |
| 64 | dprintf(reportFD, "\n"); |
| 65 | } |
| 66 | |
Robert Swiecki | d50ed42 | 2017-11-13 23:32:26 +0100 | [diff] [blame] | 67 | void report_Report(run_t* run) { |
Robert Swiecki | d440cbb | 2017-11-14 00:47:11 +0100 | [diff] [blame] | 68 | if (run->report[0] == '\0') { |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 69 | return; |
| 70 | } |
| 71 | |
Robert Swiecki | a5b918a | 2018-03-07 23:59:53 +0100 | [diff] [blame] | 72 | MX_SCOPED_LOCK(&run->global->cfg.report_mutex); |
Robert Swiecki | 216fef6 | 2016-10-20 18:32:58 +0200 | [diff] [blame] | 73 | |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 74 | if (reportFD == -1) { |
Jagger | 55e3bee | 2015-09-10 00:07:23 +0200 | [diff] [blame] | 75 | char reportFName[PATH_MAX]; |
Robert Swiecki | a5b918a | 2018-03-07 23:59:53 +0100 | [diff] [blame] | 76 | if (run->global->cfg.reportFile == NULL) { |
Robert Swiecki | 82c707c | 2017-11-14 16:36:23 +0100 | [diff] [blame] | 77 | snprintf(reportFName, sizeof(reportFName), "%s/%s", run->global->io.workDir, |
| 78 | _HF_REPORT_FILE); |
Jagger | 55e3bee | 2015-09-10 00:07:23 +0200 | [diff] [blame] | 79 | } else { |
Robert Swiecki | a5b918a | 2018-03-07 23:59:53 +0100 | [diff] [blame] | 80 | snprintf(reportFName, sizeof(reportFName), "%s", run->global->cfg.reportFile); |
Jagger | 55e3bee | 2015-09-10 00:07:23 +0200 | [diff] [blame] | 81 | } |
| 82 | |
Robert Swiecki | af7a92b | 2019-04-17 22:02:53 +0200 | [diff] [blame] | 83 | reportFD = |
| 84 | TEMP_FAILURE_RETRY(open(reportFName, O_WRONLY | O_CREAT | O_APPEND | O_CLOEXEC, 0644)); |
Jagger | 55e3bee | 2015-09-10 00:07:23 +0200 | [diff] [blame] | 85 | if (reportFD == -1) { |
Robert Swiecki | c8c32db | 2015-10-09 18:06:22 +0200 | [diff] [blame] | 86 | PLOG_F("Couldn't open('%s') for writing", reportFName); |
Jagger | 55e3bee | 2015-09-10 00:07:23 +0200 | [diff] [blame] | 87 | } |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 88 | } |
| 89 | |
robert.swiecki@gmail.com | 90e9911 | 2015-02-15 02:05:14 +0000 | [diff] [blame] | 90 | char localtmstr[PATH_MAX]; |
Robert Swiecki | 81c6a0d | 2015-09-08 15:43:20 +0200 | [diff] [blame] | 91 | util_getLocalTime("%F.%H:%M:%S", localtmstr, sizeof(localtmstr), time(NULL)); |
robert.swiecki@gmail.com | 90e9911 | 2015-02-15 02:05:14 +0000 | [diff] [blame] | 92 | |
| 93 | dprintf(reportFD, |
Robert Swiecki | 4e595fb | 2017-10-11 17:26:51 +0200 | [diff] [blame] | 94 | "=====================================================================\n" |
| 95 | "TIME: %s\n" |
| 96 | "=====================================================================\n" |
| 97 | "FUZZER ARGS:\n" |
Robert Swiecki | 10e9356 | 2017-11-04 00:57:47 +0100 | [diff] [blame] | 98 | " mutationsPerRun : %u\n" |
| 99 | " externalCmd : %s\n" |
| 100 | " fuzzStdin : %s\n" |
| 101 | " timeout : %ld (sec)\n" |
Kamil Rytarowski | bdfe2a7 | 2018-08-18 12:28:29 +0200 | [diff] [blame] | 102 | #if defined(_HF_ARCH_LINUX) || defined(_HF_ARCH_NETBSD) |
Robert Swiecki | 10e9356 | 2017-11-04 00:57:47 +0100 | [diff] [blame] | 103 | " ignoreAddr : %p\n" |
Kamil Rytarowski | b2d550a | 2018-08-10 14:43:56 +0200 | [diff] [blame] | 104 | #endif |
Robert Swiecki | 98e2337 | 2019-01-30 11:50:18 +0100 | [diff] [blame] | 105 | " ASLimit : %" PRIu64 " (MiB)\n" |
| 106 | " RSSLimit : %" PRIu64 " (MiB)\n" |
| 107 | " DATALimit : %" PRIu64 " (MiB)\n" |
Robert Swiecki | 10e9356 | 2017-11-04 00:57:47 +0100 | [diff] [blame] | 108 | " wordlistFile : %s\n", |
Robert Swiecki | 04dcac3 | 2018-03-02 03:05:26 +0100 | [diff] [blame] | 109 | localtmstr, run->global->mutate.mutationsPerRun, |
Robert Swiecki | 97d0cee | 2017-12-18 00:17:50 +0100 | [diff] [blame] | 110 | run->global->exe.externalCommand == NULL ? "NULL" : run->global->exe.externalCommand, |
Robert Swiecki | 371e129 | 2017-12-18 01:10:33 +0100 | [diff] [blame] | 111 | run->global->exe.fuzzStdin ? "TRUE" : "FALSE", run->global->timing.tmOut, |
Kamil Rytarowski | b2d550a | 2018-08-10 14:43:56 +0200 | [diff] [blame] | 112 | #if defined(_HF_ARCH_LINUX) |
| 113 | run->global->linux.ignoreAddr, |
Kamil Rytarowski | bdfe2a7 | 2018-08-18 12:28:29 +0200 | [diff] [blame] | 114 | #elif defined(_HF_ARCH_NETBSD) |
| 115 | run->global->netbsd.ignoreAddr, |
Kamil Rytarowski | b2d550a | 2018-08-10 14:43:56 +0200 | [diff] [blame] | 116 | #endif |
| 117 | run->global->exe.asLimit, run->global->exe.rssLimit, run->global->exe.dataLimit, |
Robert Swiecki | 04dcac3 | 2018-03-02 03:05:26 +0100 | [diff] [blame] | 118 | run->global->mutate.dictionaryFile == NULL ? "NULL" : run->global->mutate.dictionaryFile); |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 119 | |
| 120 | #if defined(_HF_ARCH_LINUX) |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 121 | report_printdynFileMethod(run); |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 122 | #endif |
| 123 | |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 124 | report_printTargetCmd(run); |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 125 | |
| 126 | dprintf(reportFD, |
Robert Swiecki | 4e595fb | 2017-10-11 17:26:51 +0200 | [diff] [blame] | 127 | "%s" |
| 128 | "=====================================================================\n", |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 129 | run->report); |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 130 | } |