robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 1 | /* |
robert.swiecki@gmail.com | 3b630b4 | 2015-02-16 10:53:53 +0000 | [diff] [blame] | 2 | * |
robert.swiecki@gmail.com | 772b33d | 2015-02-14 20:35:00 +0000 | [diff] [blame] | 3 | * honggfuzz - core structures and macros |
| 4 | * ----------------------------------------- |
robert.swiecki@gmail.com | 3b630b4 | 2015-02-16 10:53:53 +0000 | [diff] [blame] | 5 | * |
robert.swiecki@gmail.com | 772b33d | 2015-02-14 20:35:00 +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 | 772b33d | 2015-02-14 20:35:00 +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 | 772b33d | 2015-02-14 20:35:00 +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 | 772b33d | 2015-02-14 20:35:00 +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 | 772b33d | 2015-02-14 20:35:00 +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 | 772b33d | 2015-02-14 20:35:00 +0000 | [diff] [blame] | 22 | */ |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 23 | |
Jagger | 876a74c | 2016-02-09 22:09:11 +0100 | [diff] [blame] | 24 | #ifndef _HF_COMMON_H_ |
| 25 | #define _HF_COMMON_H_ |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 26 | |
robert.swiecki@gmail.com | ba85c3e | 2015-02-02 14:55:16 +0000 | [diff] [blame] | 27 | #include <limits.h> |
robert.swiecki@gmail.com | 41d8e05 | 2015-02-19 01:10:41 +0000 | [diff] [blame] | 28 | #include <pthread.h> |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 29 | #include <stdbool.h> |
| 30 | #include <stdint.h> |
robert.swiecki@gmail.com | ba85c3e | 2015-02-02 14:55:16 +0000 | [diff] [blame] | 31 | #include <sys/param.h> |
| 32 | #include <sys/types.h> |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 33 | |
Anestis Bechtsoudis | 4d9e8c9 | 2016-01-31 16:18:48 +0200 | [diff] [blame] | 34 | #ifdef __clang__ |
| 35 | #include <stdatomic.h> |
| 36 | #endif |
| 37 | |
Anestis Bechtsoudis | 2ff92d1 | 2015-12-20 15:33:20 +0200 | [diff] [blame] | 38 | #ifndef UNUSED |
| 39 | #define UNUSED __attribute__((unused)) |
| 40 | #endif |
| 41 | |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 42 | #define PROG_NAME "honggfuzz" |
robert.swiecki@gmail.com | a51662b | 2015-03-01 19:12:41 +0000 | [diff] [blame] | 43 | #define PROG_VERSION "0.6rc" |
robert.swiecki | 32b69c9 | 2015-02-26 14:56:36 +0000 | [diff] [blame] | 44 | #define PROG_AUTHORS "Robert Swiecki <swiecki@google.com> et al.,\nCopyright 2010-2015 by Google Inc. All Rights Reserved." |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 45 | |
Robert Swiecki | a9db9dd | 2016-03-09 16:29:37 +0100 | [diff] [blame] | 46 | /* Go-style defer implementation */ |
| 47 | #define __STRMERGE(a, b) a##b |
| 48 | #define _STRMERGE(a, b) __STRMERGE(a, b) |
| 49 | |
| 50 | #ifdef __clang__ |
| 51 | static void __attribute__ ((unused)) _clang_cleanup_func(void (^*dfunc) (void)) |
| 52 | { |
| 53 | (*dfunc) (); |
| 54 | } |
| 55 | |
| 56 | #define defer(a) void (^_STRMERGE(__df_, __COUNTER__))(void) __attribute__((cleanup(_clang_cleanup_func))) __attribute__((unused)) = ^{ a; } |
| 57 | #else |
| 58 | #define __block |
| 59 | #define defer(a) void _STRMERGE(_cleanup_func_, __LINE__)(void *_STRMERGE(_cleanup_unused_, __LINE__) __attribute__((unused))) { a; } ; int _STRMERGE(_cleanup_var_, __LINE__) __attribute__((cleanup(_STRMERGE(_cleanup_func_, __LINE__)))) __attribute__((unused)) |
| 60 | #endif |
| 61 | |
robert.swiecki@gmail.com | 64dc2a0 | 2015-02-17 22:21:30 +0000 | [diff] [blame] | 62 | /* Name of the template which will be replaced with the proper name of the file */ |
robert.swiecki@gmail.com | a0d8714 | 2015-02-14 13:11:18 +0000 | [diff] [blame] | 63 | #define _HF_FILE_PLACEHOLDER "___FILE___" |
robert.swiecki@gmail.com | 64dc2a0 | 2015-02-17 22:21:30 +0000 | [diff] [blame] | 64 | |
| 65 | /* Default name of the report created with some architectures */ |
robert.swiecki@gmail.com | e7190b9 | 2015-02-14 23:05:42 +0000 | [diff] [blame] | 66 | #define _HF_REPORT_FILE "HONGGFUZZ.REPORT.TXT" |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 67 | |
robert.swiecki@gmail.com | 64dc2a0 | 2015-02-17 22:21:30 +0000 | [diff] [blame] | 68 | /* Default stack-size of created threads. Must be bigger then _HF_DYNAMIC_FILE_MAX_SZ */ |
robert.swiecki@gmail.com | 23b3a2f | 2015-03-01 03:40:12 +0000 | [diff] [blame] | 69 | #define _HF_PTHREAD_STACKSIZE (1024 * 1024 * 8) /* 8MB */ |
robert.swiecki@gmail.com | 01b6dd4 | 2015-02-16 18:11:28 +0000 | [diff] [blame] | 70 | |
robert.swiecki@gmail.com | e768052 | 2015-02-22 22:22:37 +0000 | [diff] [blame] | 71 | /* Align to the upper-page boundary */ |
robert.swiecki | 87f7c7e | 2015-02-26 14:11:57 +0000 | [diff] [blame] | 72 | #define _HF_PAGE_ALIGN_UP(x) (((size_t)x + (size_t)getpagesize() - (size_t)1) & ~((size_t)getpagesize() - (size_t)1)) |
robert.swiecki@gmail.com | e768052 | 2015-02-22 22:22:37 +0000 | [diff] [blame] | 73 | |
Anestis Bechtsoudis | cfc39fb | 2015-08-06 10:31:36 +0300 | [diff] [blame] | 74 | /* String buffer size for function names in stack traces produced from libunwind */ |
Jagger | d628a70 | 2015-08-23 12:59:37 +0200 | [diff] [blame] | 75 | #define _HF_FUNC_NAME_SZ 256 // Should be alright for mangled C++ procs too |
Anestis Bechtsoudis | cfc39fb | 2015-08-06 10:31:36 +0300 | [diff] [blame] | 76 | |
Anestis Bechtsoudis | 5c86ebc | 2015-09-27 18:06:43 +0300 | [diff] [blame] | 77 | /* Number of crash verifier iterations before tag crash as stable */ |
| 78 | #define _HF_VERIFIER_ITER 5 |
| 79 | |
Anestis Bechtsoudis | 60ea5e7 | 2015-11-24 19:10:06 +0200 | [diff] [blame] | 80 | /* Constant prefix used for single frame crashes stackhash masking */ |
Anestis Bechtsoudis | c06f8b3 | 2015-12-26 14:48:05 +0200 | [diff] [blame] | 81 | #define _HF_SINGLE_FRAME_MASK 0xBADBAD0000000000 |
| 82 | |
| 83 | /* Size (in bytes) for report data to be stored in stack before written to file */ |
| 84 | #define _HF_REPORT_SIZE 8192 |
Anestis Bechtsoudis | 0ef9000 | 2015-11-22 21:17:06 +0200 | [diff] [blame] | 85 | |
Robert Swiecki | 72d2bef | 2016-01-19 14:39:26 +0100 | [diff] [blame] | 86 | /* |
Anestis Bechtsoudis | 02b99be | 2015-12-27 11:53:01 +0200 | [diff] [blame] | 87 | * Maximum number of iterations to keep same base seed file for dynamic preparation. |
| 88 | * Maintained iterations counters is set to zero if unique crash is detected or |
| 89 | * zero-set two MSB using following mask if crash is detected (might not be unique). |
| 90 | */ |
| 91 | #define _HF_MAX_DYNFILE_ITER 0x2000UL |
| 92 | #define _HF_DYNFILE_SUB_MASK 0xFFFUL // Zero-set two MSB |
| 93 | |
Anestis Bechtsoudis | a16f70f | 2016-01-03 13:03:21 +0200 | [diff] [blame] | 94 | /* Bitmap size */ |
Robert Swiecki | 94335d6 | 2016-01-26 17:06:20 +0100 | [diff] [blame] | 95 | #define _HF_BITMAP_SIZE 0x2AFFFFF |
Anestis Bechtsoudis | a16f70f | 2016-01-03 13:03:21 +0200 | [diff] [blame] | 96 | |
| 97 | /* Directory in workspace to store sanitizer coverage data */ |
| 98 | #define _HF_SANCOV_DIR "HF_SANCOV" |
| 99 | |
Anestis Bechtsoudis | 8e634c3 | 2016-01-13 13:07:26 +0200 | [diff] [blame] | 100 | #if defined(__ANDROID__) |
| 101 | #define _HF_MONITOR_SIGABRT 0 |
| 102 | #else |
| 103 | #define _HF_MONITOR_SIGABRT 1 |
| 104 | #endif |
| 105 | |
Anestis Bechtsoudis | 7c88d7a | 2016-02-09 17:55:38 +0200 | [diff] [blame] | 106 | /* Size of remote pid cmdline char buffer */ |
| 107 | #define _HF_PROC_CMDLINE_SZ 8192 |
| 108 | |
robert.swiecki@gmail.com | cac22fd | 2015-02-19 14:03:28 +0000 | [diff] [blame] | 109 | typedef enum { |
robert.swiecki@gmail.com | 81e26dc | 2015-03-03 04:26:04 +0000 | [diff] [blame] | 110 | _HF_DYNFILE_NONE = 0x0, |
| 111 | _HF_DYNFILE_INSTR_COUNT = 0x1, |
| 112 | _HF_DYNFILE_BRANCH_COUNT = 0x2, |
Jagger | 3abc560 | 2016-02-04 00:53:43 +0100 | [diff] [blame] | 113 | _HF_DYNFILE_BTS_BLOCK = 0x8, |
| 114 | _HF_DYNFILE_BTS_EDGE = 0x10, |
Jagger | 39bd2b0 | 2016-02-04 01:16:15 +0100 | [diff] [blame] | 115 | _HF_DYNFILE_IPT_BLOCK = 0x20, |
Jagger | 0d2727a | 2016-02-08 02:08:42 +0100 | [diff] [blame] | 116 | _HF_DYNFILE_CUSTOM = 0x40, |
robert.swiecki@gmail.com | cac22fd | 2015-02-19 14:03:28 +0000 | [diff] [blame] | 117 | } dynFileMethod_t; |
| 118 | |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 119 | typedef struct { |
Jagger | b409ee1 | 2015-09-09 02:02:32 +0200 | [diff] [blame] | 120 | uint64_t cpuInstrCnt; |
| 121 | uint64_t cpuBranchCnt; |
Jagger | 39bd2b0 | 2016-02-04 01:16:15 +0100 | [diff] [blame] | 122 | uint64_t cpuBtsBlockCnt; |
| 123 | uint64_t cpuBtsEdgeCnt; |
| 124 | uint64_t cpuIptBlockCnt; |
Jagger | b409ee1 | 2015-09-09 02:02:32 +0200 | [diff] [blame] | 125 | uint64_t customCnt; |
| 126 | } hwcnt_t; |
| 127 | |
Anestis Bechtsoudis | a16f70f | 2016-01-03 13:03:21 +0200 | [diff] [blame] | 128 | /* Sanitizer coverage specific data structures */ |
Jagger | b409ee1 | 2015-09-09 02:02:32 +0200 | [diff] [blame] | 129 | typedef struct { |
Anestis Bechtsoudis | 56e360f | 2016-01-11 14:29:17 +0200 | [diff] [blame] | 130 | uint64_t hitBBCnt; |
| 131 | uint64_t totalBBCnt; |
Anestis Bechtsoudis | a16f70f | 2016-01-03 13:03:21 +0200 | [diff] [blame] | 132 | uint64_t dsoCnt; |
| 133 | uint64_t iDsoCnt; |
Anestis Bechtsoudis | 56e360f | 2016-01-11 14:29:17 +0200 | [diff] [blame] | 134 | uint64_t newBBCnt; |
Anestis Bechtsoudis | a16f70f | 2016-01-03 13:03:21 +0200 | [diff] [blame] | 135 | uint64_t crashesCnt; |
Anestis Bechtsoudis | be0ac7b | 2015-12-26 15:38:47 +0200 | [diff] [blame] | 136 | } sancovcnt_t; |
| 137 | |
| 138 | typedef struct { |
Anestis Bechtsoudis | a16f70f | 2016-01-03 13:03:21 +0200 | [diff] [blame] | 139 | uint32_t capacity; |
| 140 | uint32_t *pChunks; |
| 141 | uint32_t nChunks; |
| 142 | } bitmap_t; |
| 143 | |
| 144 | /* Memory map struct */ |
| 145 | typedef struct __attribute__ ((packed)) { |
| 146 | uint64_t start; // region start addr |
| 147 | uint64_t end; // region end addr |
| 148 | uint64_t base; // region base addr |
| 149 | char mapName[NAME_MAX]; // bin/DSO name |
Anestis Bechtsoudis | 56e360f | 2016-01-11 14:29:17 +0200 | [diff] [blame] | 150 | uint64_t bbCnt; |
| 151 | uint64_t newBBCnt; |
Anestis Bechtsoudis | a16f70f | 2016-01-03 13:03:21 +0200 | [diff] [blame] | 152 | } memMap_t; |
| 153 | |
| 154 | /* Trie node data struct */ |
| 155 | typedef struct __attribute__ ((packed)) { |
Anestis Bechtsoudis | a16f70f | 2016-01-03 13:03:21 +0200 | [diff] [blame] | 156 | bitmap_t *pBM; |
| 157 | } trieData_t; |
| 158 | |
| 159 | /* Trie node struct */ |
| 160 | typedef struct __attribute__ ((packed)) node { |
| 161 | char key; |
| 162 | trieData_t data; |
| 163 | struct node *next; |
| 164 | struct node *prev; |
| 165 | struct node *children; |
| 166 | struct node *parent; |
| 167 | } node_t; |
Anestis Bechtsoudis | b78cf60 | 2016-01-07 13:10:50 +0200 | [diff] [blame] | 168 | |
Anestis Bechtsoudis | a16f70f | 2016-01-03 13:03:21 +0200 | [diff] [blame] | 169 | /* EOF Sanitizer coverage specific data structures */ |
| 170 | |
| 171 | typedef struct { |
Anestis Bechtsoudis | 61b5ab1 | 2016-01-08 16:07:02 +0200 | [diff] [blame] | 172 | char *asanOpts; |
| 173 | char *msanOpts; |
| 174 | char *ubsanOpts; |
| 175 | } sanOpts_t; |
| 176 | |
| 177 | typedef struct { |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 178 | char **cmdline; |
Robert Swiecki | 72d2bef | 2016-01-19 14:39:26 +0100 | [diff] [blame] | 179 | char cmdline_txt[PATH_MAX]; |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 180 | char *inputFile; |
| 181 | bool nullifyStdio; |
| 182 | bool fuzzStdin; |
| 183 | bool saveUnique; |
Jagger | 0764ad7 | 2015-09-06 01:11:08 +0200 | [diff] [blame] | 184 | bool useScreen; |
Anestis Bechtsoudis | 5c86ebc | 2015-09-27 18:06:43 +0300 | [diff] [blame] | 185 | bool useVerifier; |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 186 | char *fileExtn; |
Anestis Bechtsoudis | d968053 | 2015-09-06 17:37:05 +0300 | [diff] [blame] | 187 | char *workDir; |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 188 | double flipRate; |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 189 | char *externalCommand; |
robert.swiecki@gmail.com | 4f1124f | 2015-04-21 17:12:22 +0000 | [diff] [blame] | 190 | const char *dictionaryFile; |
Anestis Bechtsoudis | 70f2fbd | 2016-01-14 13:15:19 +0200 | [diff] [blame] | 191 | char **dictionary; |
Anestis Bechtsoudis | d59af69 | 2015-09-21 15:15:05 +0300 | [diff] [blame] | 192 | const char *blacklistFile; |
| 193 | uint64_t *blacklist; |
| 194 | size_t blacklistCnt; |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 195 | long tmOut; |
Jagger | ea39a8f | 2015-09-05 00:57:22 +0200 | [diff] [blame] | 196 | size_t dictionaryCnt; |
| 197 | size_t mutationsMax; |
Jagger | ea39a8f | 2015-09-05 00:57:22 +0200 | [diff] [blame] | 198 | size_t threadsMax; |
| 199 | size_t threadsFinished; |
robert.swiecki@gmail.com | 4da86bf | 2015-02-22 14:24:58 +0000 | [diff] [blame] | 200 | size_t maxFileSz; |
robert.swiecki@gmail.com | e7190b9 | 2015-02-14 23:05:42 +0000 | [diff] [blame] | 201 | char *reportFile; |
Robert Swiecki | c578d64 | 2015-09-08 16:13:36 +0200 | [diff] [blame] | 202 | uint64_t asLimit; |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 203 | char **files; |
Anestis Bechtsoudis | 46ea10e | 2015-11-07 18:16:25 +0200 | [diff] [blame] | 204 | size_t fileCnt; |
| 205 | size_t lastCheckedFileIndex; |
Jagger | cdbf685 | 2016-02-07 22:06:02 +0100 | [diff] [blame] | 206 | int exeFd; |
robert.swiecki@gmail.com | 15eca6f | 2015-03-04 03:31:36 +0000 | [diff] [blame] | 207 | char *envs[128]; |
robert.swiecki@gmail.com | 41d8e05 | 2015-02-19 01:10:41 +0000 | [diff] [blame] | 208 | |
Jagger | 630aa7f | 2015-09-06 02:53:51 +0200 | [diff] [blame] | 209 | time_t timeStart; |
Jagger | 0764ad7 | 2015-09-06 01:11:08 +0200 | [diff] [blame] | 210 | size_t mutationsCnt; |
| 211 | size_t crashesCnt; |
Anestis Bechtsoudis | d7e8ed2 | 2015-09-10 18:29:34 +0300 | [diff] [blame] | 212 | size_t uniqueCrashesCnt; |
Anestis Bechtsoudis | 79b799e | 2015-11-01 00:02:25 +0200 | [diff] [blame] | 213 | size_t verifiedCrashesCnt; |
Anestis Bechtsoudis | d59af69 | 2015-09-21 15:15:05 +0300 | [diff] [blame] | 214 | size_t blCrashesCnt; |
Jagger | 4b5281e | 2015-09-06 02:35:37 +0200 | [diff] [blame] | 215 | size_t timeoutedCnt; |
Jagger | 0764ad7 | 2015-09-06 01:11:08 +0200 | [diff] [blame] | 216 | |
Anestis Bechtsoudis | 413cb13 | 2016-02-07 12:59:00 +0200 | [diff] [blame] | 217 | /* For the Linux code */ |
robert.swiecki@gmail.com | cd74cfc | 2015-02-19 16:37:49 +0000 | [diff] [blame] | 218 | uint8_t *dynamicFileBest; |
robert.swiecki@gmail.com | 6d6f756 | 2015-02-17 22:18:51 +0000 | [diff] [blame] | 219 | size_t dynamicFileBestSz; |
robert.swiecki@gmail.com | cac22fd | 2015-02-19 14:03:28 +0000 | [diff] [blame] | 220 | dynFileMethod_t dynFileMethod; |
Jagger | b409ee1 | 2015-09-09 02:02:32 +0200 | [diff] [blame] | 221 | hwcnt_t hwCnts; |
Anestis Bechtsoudis | be0ac7b | 2015-12-26 15:38:47 +0200 | [diff] [blame] | 222 | sancovcnt_t sanCovCnts; |
robert.swiecki@gmail.com | 684f60c | 2015-03-01 17:39:18 +0000 | [diff] [blame] | 223 | uint64_t dynamicCutOffAddr; |
robert.swiecki@gmail.com | 41d8e05 | 2015-02-19 01:10:41 +0000 | [diff] [blame] | 224 | pthread_mutex_t dynamicFile_mutex; |
Jagger | dbc4a15 | 2015-09-08 01:26:58 +0200 | [diff] [blame] | 225 | bool disableRandomization; |
| 226 | bool msanReportUMRS; |
Robert Swiecki | a88f96f | 2015-10-09 16:47:39 +0200 | [diff] [blame] | 227 | void *ignoreAddr; |
Anestis Bechtsoudis | be0ac7b | 2015-12-26 15:38:47 +0200 | [diff] [blame] | 228 | bool useSanCov; |
Anestis Bechtsoudis | a16f70f | 2016-01-03 13:03:21 +0200 | [diff] [blame] | 229 | node_t *covMetadata; |
Anestis Bechtsoudis | 1fd10c7 | 2016-01-07 12:38:45 +0200 | [diff] [blame] | 230 | bool clearCovMetadata; |
Anestis Bechtsoudis | 02b99be | 2015-12-27 11:53:01 +0200 | [diff] [blame] | 231 | size_t dynFileIterExpire; |
Anestis Bechtsoudis | a16f70f | 2016-01-03 13:03:21 +0200 | [diff] [blame] | 232 | pthread_mutex_t sanCov_mutex; |
Anestis Bechtsoudis | ac05480 | 2016-01-07 23:48:06 +0200 | [diff] [blame] | 233 | pthread_mutex_t workersBlock_mutex; |
Anestis Bechtsoudis | 61b5ab1 | 2016-01-08 16:07:02 +0200 | [diff] [blame] | 234 | sanOpts_t sanOpts; |
Anestis Bechtsoudis | a1b0a65 | 2016-01-08 16:14:55 +0200 | [diff] [blame] | 235 | size_t numMajorFrames; |
Anestis Bechtsoudis | a1f8a03 | 2016-01-14 16:45:30 +0200 | [diff] [blame] | 236 | bool isDynFileLocked; |
Anestis Bechtsoudis | 413cb13 | 2016-02-07 12:59:00 +0200 | [diff] [blame] | 237 | pid_t pid; |
| 238 | const char *pidFile; |
Anestis Bechtsoudis | 7c88d7a | 2016-02-09 17:55:38 +0200 | [diff] [blame] | 239 | char *pidCmd; |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 240 | } honggfuzz_t; |
| 241 | |
robert.swiecki@gmail.com | 882900b | 2015-02-11 13:56:22 +0000 | [diff] [blame] | 242 | typedef struct fuzzer_t { |
| 243 | pid_t pid; |
robert.swiecki@gmail.com | 3213a11 | 2015-03-12 01:42:02 +0000 | [diff] [blame] | 244 | int64_t timeStartedMillis; |
robert.swiecki@gmail.com | 882900b | 2015-02-11 13:56:22 +0000 | [diff] [blame] | 245 | char origFileName[PATH_MAX]; |
| 246 | char fileName[PATH_MAX]; |
Anestis Bechtsoudis | 5c86ebc | 2015-09-27 18:06:43 +0300 | [diff] [blame] | 247 | char crashFileName[PATH_MAX]; |
robert.swiecki@gmail.com | 882900b | 2015-02-11 13:56:22 +0000 | [diff] [blame] | 248 | uint64_t pc; |
| 249 | uint64_t backtrace; |
| 250 | uint64_t access; |
| 251 | int exception; |
Anestis Bechtsoudis | c06f8b3 | 2015-12-26 14:48:05 +0200 | [diff] [blame] | 252 | char report[_HF_REPORT_SIZE]; |
Anestis Bechtsoudis | 6b9e83d | 2015-10-02 11:10:50 -0700 | [diff] [blame] | 253 | bool mainWorker; |
robert.swiecki@gmail.com | d4dd4df | 2015-02-18 00:50:12 +0000 | [diff] [blame] | 254 | |
Anestis Bechtsoudis | 413cb13 | 2016-02-07 12:59:00 +0200 | [diff] [blame] | 255 | /* For Linux code */ |
robert.swiecki@gmail.com | cd74cfc | 2015-02-19 16:37:49 +0000 | [diff] [blame] | 256 | uint8_t *dynamicFile; |
Jagger | b409ee1 | 2015-09-09 02:02:32 +0200 | [diff] [blame] | 257 | hwcnt_t hwCnts; |
Anestis Bechtsoudis | be0ac7b | 2015-12-26 15:38:47 +0200 | [diff] [blame] | 258 | sancovcnt_t sanCovCnts; |
robert.swiecki@gmail.com | 4da86bf | 2015-02-22 14:24:58 +0000 | [diff] [blame] | 259 | size_t dynamicFileSz; |
robert.swiecki@gmail.com | 882900b | 2015-02-11 13:56:22 +0000 | [diff] [blame] | 260 | } fuzzer_t; |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 261 | |
Anestis Bechtsoudis | cfc39fb | 2015-08-06 10:31:36 +0300 | [diff] [blame] | 262 | #define _HF_MAX_FUNCS 80 |
robert.swiecki@gmail.com | a0d8714 | 2015-02-14 13:11:18 +0000 | [diff] [blame] | 263 | typedef struct { |
| 264 | void *pc; |
Anestis Bechtsoudis | cfc39fb | 2015-08-06 10:31:36 +0300 | [diff] [blame] | 265 | char func[_HF_FUNC_NAME_SZ]; |
| 266 | size_t line; |
robert.swiecki@gmail.com | a0d8714 | 2015-02-14 13:11:18 +0000 | [diff] [blame] | 267 | } funcs_t; |
| 268 | |
robert.swiecki@gmail.com | 4da86bf | 2015-02-22 14:24:58 +0000 | [diff] [blame] | 269 | #define ARRAYSIZE(x) (sizeof(x) / sizeof(*x)) |
| 270 | |
Jagger | cc42cd6 | 2016-02-06 17:43:39 +0100 | [diff] [blame] | 271 | #define rmb() __asm__ __volatile__("":::"memory") |
| 272 | #define wmb() __sync_synchronize() |
| 273 | |
robert.swiecki | 3bb518c | 2010-10-14 00:48:24 +0000 | [diff] [blame] | 274 | #endif |