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@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 8 | * Copyright 2010-2015 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@gmail.com | 90e9911 | 2015-02-15 02:05:14 +0000 | [diff] [blame] | 26 | #include <fcntl.h> |
Jagger | 921bf56 | 2015-09-08 22:05:47 +0200 | [diff] [blame] | 27 | #include <inttypes.h> |
robert.swiecki@gmail.com | 90e9911 | 2015-02-15 02:05:14 +0000 | [diff] [blame] | 28 | #include <stdio.h> |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 29 | #include <sys/stat.h> |
Robert Swiecki | d0fa62c | 2017-09-28 18:11:05 +0200 | [diff] [blame] | 30 | #include <sys/types.h> |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 31 | |
Robert Swiecki | 10eeb0a | 2017-09-28 15:42:52 +0200 | [diff] [blame] | 32 | #include "libcommon/common.h" |
Robert Swiecki | 241a741 | 2017-05-24 01:53:15 +0200 | [diff] [blame] | 33 | #include "libcommon/log.h" |
| 34 | #include "libcommon/util.h" |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 35 | |
| 36 | static int reportFD = -1; |
| 37 | |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 38 | #if defined(_HF_ARCH_LINUX) |
Robert Swiecki | d50ed42 | 2017-11-13 23:32:26 +0100 | [diff] [blame] | 39 | static void report_printdynFileMethod(run_t* run) { |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 40 | dprintf(reportFD, " dynFileMethod: "); |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 41 | if (run->global->dynFileMethod == 0) |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 42 | dprintf(reportFD, "NONE\n"); |
| 43 | else { |
Robert Swiecki | d50ed42 | 2017-11-13 23:32:26 +0100 | [diff] [blame] | 44 | if (run->global->dynFileMethod & _HF_DYNFILE_INSTR_COUNT) dprintf(reportFD, "INSTR_COUNT "); |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 45 | if (run->global->dynFileMethod & _HF_DYNFILE_BRANCH_COUNT) |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 46 | dprintf(reportFD, "BRANCH_COUNT "); |
Robert Swiecki | d50ed42 | 2017-11-13 23:32:26 +0100 | [diff] [blame] | 47 | if (run->global->dynFileMethod & _HF_DYNFILE_BTS_EDGE) dprintf(reportFD, "BTS_EDGE_COUNT "); |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 48 | if (run->global->dynFileMethod & _HF_DYNFILE_IPT_BLOCK) |
Robert Swiecki | 6134ce0 | 2017-06-14 14:58:37 +0200 | [diff] [blame] | 49 | dprintf(reportFD, "IPT_BLOCK_COUNT "); |
Anestis Bechtsoudis | f9f4a85 | 2015-08-18 14:30:02 +0300 | [diff] [blame] | 50 | |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 51 | dprintf(reportFD, "\n"); |
| 52 | } |
| 53 | } |
| 54 | #endif |
| 55 | |
Robert Swiecki | d50ed42 | 2017-11-13 23:32:26 +0100 | [diff] [blame] | 56 | static void report_printTargetCmd(run_t* run) { |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 57 | dprintf(reportFD, " fuzzTarget : "); |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 58 | for (int x = 0; run->global->cmdline[x]; x++) { |
| 59 | dprintf(reportFD, "%s ", run->global->cmdline[x]); |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 60 | } |
| 61 | dprintf(reportFD, "\n"); |
| 62 | } |
| 63 | |
Robert Swiecki | d50ed42 | 2017-11-13 23:32:26 +0100 | [diff] [blame] | 64 | void report_Report(run_t* run) { |
Robert Swiecki | d440cbb | 2017-11-14 00:47:11 +0100 | [diff] [blame] | 65 | if (run->report[0] == '\0') { |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 66 | return; |
| 67 | } |
| 68 | |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 69 | MX_SCOPED_LOCK(&run->global->report_mutex); |
Robert Swiecki | 216fef6 | 2016-10-20 18:32:58 +0200 | [diff] [blame] | 70 | |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 71 | if (reportFD == -1) { |
Jagger | 55e3bee | 2015-09-10 00:07:23 +0200 | [diff] [blame] | 72 | char reportFName[PATH_MAX]; |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 73 | if (run->global->reportFile == NULL) { |
Robert Swiecki | 82c707c | 2017-11-14 16:36:23 +0100 | [diff] [blame] | 74 | snprintf(reportFName, sizeof(reportFName), "%s/%s", run->global->io.workDir, |
| 75 | _HF_REPORT_FILE); |
Jagger | 55e3bee | 2015-09-10 00:07:23 +0200 | [diff] [blame] | 76 | } else { |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 77 | snprintf(reportFName, sizeof(reportFName), "%s", run->global->reportFile); |
Jagger | 55e3bee | 2015-09-10 00:07:23 +0200 | [diff] [blame] | 78 | } |
| 79 | |
Jagger | 5a3c4c3 | 2016-04-16 19:27:47 +0200 | [diff] [blame] | 80 | reportFD = open(reportFName, O_WRONLY | O_CREAT | O_APPEND | O_CLOEXEC, 0644); |
Jagger | 55e3bee | 2015-09-10 00:07:23 +0200 | [diff] [blame] | 81 | if (reportFD == -1) { |
Robert Swiecki | c8c32db | 2015-10-09 18:06:22 +0200 | [diff] [blame] | 82 | PLOG_F("Couldn't open('%s') for writing", reportFName); |
Jagger | 55e3bee | 2015-09-10 00:07:23 +0200 | [diff] [blame] | 83 | } |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 84 | } |
| 85 | |
robert.swiecki@gmail.com | 90e9911 | 2015-02-15 02:05:14 +0000 | [diff] [blame] | 86 | char localtmstr[PATH_MAX]; |
Robert Swiecki | 81c6a0d | 2015-09-08 15:43:20 +0200 | [diff] [blame] | 87 | 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] | 88 | |
| 89 | dprintf(reportFD, |
Robert Swiecki | 4e595fb | 2017-10-11 17:26:51 +0200 | [diff] [blame] | 90 | "=====================================================================\n" |
| 91 | "TIME: %s\n" |
| 92 | "=====================================================================\n" |
| 93 | "FUZZER ARGS:\n" |
Robert Swiecki | 10e9356 | 2017-11-04 00:57:47 +0100 | [diff] [blame] | 94 | " mutationsPerRun : %u\n" |
| 95 | " externalCmd : %s\n" |
| 96 | " fuzzStdin : %s\n" |
| 97 | " timeout : %ld (sec)\n" |
| 98 | " ignoreAddr : %p\n" |
Robert Swiecki | 8954afd | 2017-11-14 18:14:22 +0100 | [diff] [blame] | 99 | " ASLimit : %" PRIu64 |
| 100 | " (MiB)\n" |
| 101 | " RSSLimit : %" PRIu64 |
| 102 | " (MiB)\n" |
| 103 | " DATALimit : %" PRIu64 |
Robert Swiecki | d50ed42 | 2017-11-13 23:32:26 +0100 | [diff] [blame] | 104 | " (MiB)\n" |
Robert Swiecki | 10e9356 | 2017-11-04 00:57:47 +0100 | [diff] [blame] | 105 | " targetPid : %d\n" |
| 106 | " targetCmd : %s\n" |
| 107 | " wordlistFile : %s\n", |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 108 | localtmstr, run->global->mutationsPerRun, |
| 109 | run->global->externalCommand == NULL ? "NULL" : run->global->externalCommand, |
| 110 | run->global->fuzzStdin ? "TRUE" : "FALSE", run->global->tmOut, |
Robert Swiecki | 8954afd | 2017-11-14 18:14:22 +0100 | [diff] [blame] | 111 | run->global->linux.ignoreAddr, run->global->asLimit, run->global->rssLimit, |
| 112 | run->global->dataLimit, run->global->linux.pid, run->global->linux.pidCmd, |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 113 | run->global->dictionaryFile == NULL ? "NULL" : run->global->dictionaryFile); |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 114 | |
| 115 | #if defined(_HF_ARCH_LINUX) |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 116 | report_printdynFileMethod(run); |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 117 | #endif |
| 118 | |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 119 | report_printTargetCmd(run); |
Anestis Bechtsoudis | f5268a6 | 2015-08-07 16:48:46 +0300 | [diff] [blame] | 120 | |
| 121 | dprintf(reportFD, |
Robert Swiecki | 4e595fb | 2017-10-11 17:26:51 +0200 | [diff] [blame] | 122 | "%s" |
| 123 | "=====================================================================\n", |
Robert Swiecki | 78633d1 | 2017-11-13 23:24:55 +0100 | [diff] [blame] | 124 | run->report); |
robert.swiecki@gmail.com | 97c7733 | 2015-02-14 23:06:58 +0000 | [diff] [blame] | 125 | } |