Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Side by Side Diff: third_party/afl/src/docs/status_screen.txt

Issue 2238013002: Roll src/third_party/afl/src/ 2.14b..2.30b (16 versions). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Note in "Local Modifications" that we have removed dictionaries/. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 =============================== 1 ===============================
2 Understanding the status screen 2 Understanding the status screen
3 =============================== 3 ===============================
4 4
5 This document provides an overview of the status screen - plus tips for 5 This document provides an overview of the status screen - plus tips for
6 troubleshooting any warnings and red text shown in the UI. See README for 6 troubleshooting any warnings and red text shown in the UI. See README for
7 the general instruction manual. 7 the general instruction manual.
8 8
9 0) A note about colors 9 0) A note about colors
10 ---------------------- 10 ----------------------
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 The "*" suffix sometimes shown in the first line means that the currently 112 The "*" suffix sometimes shown in the first line means that the currently
113 processed path is not "favored" (a property discussed later on, in section 6). 113 processed path is not "favored" (a property discussed later on, in section 6).
114 114
115 If you feel that the fuzzer is progressing too slowly, see the note about the 115 If you feel that the fuzzer is progressing too slowly, see the note about the
116 -d option in section 2 of this doc. 116 -d option in section 2 of this doc.
117 117
118 4) Map coverage 118 4) Map coverage
119 --------------- 119 ---------------
120 120
121 +--------------------------------------+ 121 +--------------------------------------+
122 | map density : 4763 (29.07%) | 122 | map density : 10.15% / 29.07% |
123 | count coverage : 4.03 bits/tuple | 123 | count coverage : 4.03 bits/tuple |
124 +--------------------------------------+ 124 +--------------------------------------+
125 125
126 The section provides some trivia about the coverage observed by the 126 The section provides some trivia about the coverage observed by the
127 instrumentation embedded in the target binary. 127 instrumentation embedded in the target binary.
128 128
129 The first line in the box tells you how many branch tuples we have already 129 The first line in the box tells you how many branch tuples we have already
130 hit, in proportion to how much the bitmap can hold. Be wary of extremes: 130 hit, in proportion to how much the bitmap can hold. The number on the left
131 describes the current input; the one on the right is the value for the entire
132 input corpus.
133
134 Be wary of extremes:
131 135
132 - Absolute numbers below 200 or so suggest one of three things: that the 136 - Absolute numbers below 200 or so suggest one of three things: that the
133 program is extremely simple; that it is not instrumented properly (e.g., 137 program is extremely simple; that it is not instrumented properly (e.g.,
134 due to being linked against a non-instrumented copy of the target 138 due to being linked against a non-instrumented copy of the target
135 library); or that it is bailing out prematurely on your input test cases. 139 library); or that it is bailing out prematurely on your input test cases.
136 The fuzzer will try to mark this in pink, just to make you aware. 140 The fuzzer will try to mark this in pink, just to make you aware.
137 141
138 - Percentages over 70% may very rarely happen with very complex programs 142 - Percentages over 70% may very rarely happen with very complex programs
139 that make heavy use of template-generated code. 143 that make heavy use of template-generated code.
140 144
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 268
265 8) Path geometry 269 8) Path geometry
266 ---------------- 270 ----------------
267 271
268 +---------------------+ 272 +---------------------+
269 | levels : 5 | 273 | levels : 5 |
270 | pending : 1570 | 274 | pending : 1570 |
271 | pend fav : 583 | 275 | pend fav : 583 |
272 | own finds : 0 | 276 | own finds : 0 |
273 | imported : 0 | 277 | imported : 0 |
274 | variable : 0 | 278 | stability : 100.00% |
275 +---------------------+ 279 +---------------------+
276 280
277 The first field in this section tracks the path depth reached through the 281 The first field in this section tracks the path depth reached through the
278 guided fuzzing process. In essence: the initial test cases supplied by the 282 guided fuzzing process. In essence: the initial test cases supplied by the
279 user are considered "level 1". The test cases that can be derived from that 283 user are considered "level 1". The test cases that can be derived from that
280 through traditional fuzzing are considered "level 2"; the ones derived by 284 through traditional fuzzing are considered "level 2"; the ones derived by
281 using these as inputs to subsequent fuzzing rounds are "level 3"; and so forth. 285 using these as inputs to subsequent fuzzing rounds are "level 3"; and so forth.
282 The maximum depth is therefore a rough proxy for how much value you're getting 286 The maximum depth is therefore a rough proxy for how much value you're getting
283 out of the instrumentation-guided approach taken by afl-fuzz. 287 out of the instrumentation-guided approach taken by afl-fuzz.
284 288
285 The next field shows you the number of inputs that have not gone through any 289 The next field shows you the number of inputs that have not gone through any
286 fuzzing yet. The same stat is also given for "favored" entries that the fuzzer 290 fuzzing yet. The same stat is also given for "favored" entries that the fuzzer
287 really wants to get to in this queue cycle (the non-favored entries may have to 291 really wants to get to in this queue cycle (the non-favored entries may have to
288 wait a couple of cycles to get their chance). 292 wait a couple of cycles to get their chance).
289 293
290 Next, we have the number of new paths found during this fuzzing section and 294 Next, we have the number of new paths found during this fuzzing section and
291 imported from other fuzzer instances when doing parallelized fuzzing; and the 295 imported from other fuzzer instances when doing parallelized fuzzing; and the
292 number of inputs that produce seemingly variable behavior in the tested binary. 296 number of inputs that produce seemingly variable behavior in the tested binary.
293 297
294 That last bit is actually fairly interesting. There are four quasi-common 298 That last bit is actually fairly interesting: it measures the consistency of
295 explanations for variable behavior of the tested program: 299 observed traces. If a program always behaves the same for the same input data,
300 it will earn a score of 100%. When the value is lower but still shown in purple,
301 the fuzzing process is unlikely to be negatively affected. If it goes into red,
302 you may be in trouble, since AFL will have difficulty discerning between
303 meaningful and "phantom" effects of tweaking the input file.
296 304
297 - Use of uninitialized memory in conjunction with some intrinsic sources of 305 Now, most targets will just get a 100% score, but when you see lower figures,
298 entropy in the tested binary. This can be indicative of a security bug. 306 there are several things to look at:
299 307
300 - Attempts to create files that were already created during previous runs, or 308 - The use of uninitialized memory in conjunction with some intrinsic sources
301 otherwise interact with some form of persistent state. This is harmless, 309 of entropy in the tested binary. Harmless to AFL, but could be indicative
302 but you may want to instruct the targeted program to write to stdout or to 310 of a security bug.
303 /dev/null to avoid surprises (and disable the creation of temporary files
304 and similar artifacts, if applicable).
305 311
306 - Hitting functionality that is actually designed to behave randomly. For 312 - Attempts to manipulate persistent resources, such as left over temporary
307 example, when fuzzing sqlite, the fuzzer will dutifully detect variable 313 files or shared memory objects. This is usually harmless, but you may want
308 behavior once the mutation engine generates something like: 314 to double-check to make sure the program isn't bailing out prematurely.
315 Running out of disk space, SHM handles, or other global resources can
316 trigger this, too.
309 317
310 select random(); 318 - Hitting some functionality that is actually designed to behave randomly.
319 Generally harmless. For example, when fuzzing sqlite, an input like
320 'select random();' will trigger a variable execution path.
311 321
312 - Multiple threads executing at once in semi-random order. This is usually 322 - Multiple threads executing at once in semi-random order. This is harmless
313 just a nuisance, but if the number of variable paths is very high, try the 323 when the 'stability' metric stays over 90% or so, but can become an issue
314 following options: 324 if not. Here's what to try:
315 325
316 - Use afl-clang-fast from llvm_mode/ - it uses a thread-local tracking 326 - Use afl-clang-fast from llvm_mode/ - it uses a thread-local tracking
317 model that is less prone to concurrency issues, 327 model that is less prone to concurrency issues,
318 328
319 - See if the target can be compiled or run without threads. Common 329 - See if the target can be compiled or run without threads. Common
320 ./configure options include --without-threads, --disable-pthreads, or 330 ./configure options include --without-threads, --disable-pthreads, or
321 --disable-openmp. 331 --disable-openmp.
322 332
323 - Replace pthreads with GNU Pth (https://www.gnu.org/software/pth/), which 333 - Replace pthreads with GNU Pth (https://www.gnu.org/software/pth/), which
324 allows you to use a deterministic scheduler. 334 allows you to use a deterministic scheduler.
325 335
326 Less likely causes may include running out of disk space, SHM handles, or other 336 - In persistent mode, minor drops in the "stability" metric can be normal,
327 globally limited resources. 337 because not all the code behaves identically when re-entered; but major
338 dips may signify that the code within __AFL_LOOP() is not behaving
339 correctly on subsequent iterations (e.g., due to incomplete clean-up or
340 reinitialization of the state) and that most of the fuzzing effort goes
341 to waste.
328 342
329 The paths where variable behavior is detected are marked with a matching entry 343 The paths where variable behavior is detected are marked with a matching entry
330 in the <out_dir>/queue/.state/variable_behavior/ directory, so you can look 344 in the <out_dir>/queue/.state/variable_behavior/ directory, so you can look
331 them up easily. 345 them up easily.
332 346
333 If you can't suppress variable behavior and don't want to see these warnings,
334 simply set AFL_NO_VAR_CHECK=1 in the environment before running afl-fuzz. This
335 will also dramatically speed up session resumption.
336
337 9) CPU load 347 9) CPU load
338 ----------- 348 -----------
339 349
340 [cpu: 25%] 350 [cpu: 25%]
341 351
342 This tiny widget shows the apparent CPU utilization on the local system. It is 352 This tiny widget shows the apparent CPU utilization on the local system. It is
343 calculated by taking the number of processes in the "runnable" state, and then 353 calculated by taking the number of processes in the "runnable" state, and then
344 comparing it to the number of logical cores on the system. 354 comparing it to the number of logical cores on the system.
345 355
346 If the value is shown in green, you are using fewer CPU cores than available on 356 If the value is shown in green, you are using fewer CPU cores than available on
(...skipping 24 matching lines...) Expand all
371 - cycles_done - queue cycles completed so far 381 - cycles_done - queue cycles completed so far
372 - execs_done - number of execve() calls attempted 382 - execs_done - number of execve() calls attempted
373 - execs_per_sec - current number of execs per second 383 - execs_per_sec - current number of execs per second
374 - paths_total - total number of entries in the queue 384 - paths_total - total number of entries in the queue
375 - paths_found - number of entries discovered through local fuzzing 385 - paths_found - number of entries discovered through local fuzzing
376 - paths_imported - number of entries imported from other instances 386 - paths_imported - number of entries imported from other instances
377 - max_depth - number of levels in the generated data set 387 - max_depth - number of levels in the generated data set
378 - cur_path - currently processed entry number 388 - cur_path - currently processed entry number
379 - pending_favs - number of favored entries still waiting to be fuzzed 389 - pending_favs - number of favored entries still waiting to be fuzzed
380 - pending_total - number of all entries waiting to be fuzzed 390 - pending_total - number of all entries waiting to be fuzzed
391 - stability - percentage of bitmap bytes that behave consistently
381 - variable_paths - number of test cases showing variable behavior 392 - variable_paths - number of test cases showing variable behavior
382 - unique_crashes - number of unique crashes recorded 393 - unique_crashes - number of unique crashes recorded
383 - unique_hangs - number of unique hangs encountered 394 - unique_hangs - number of unique hangs encountered
384 395
385 Most of these map directly to the UI elements discussed earlier on. 396 Most of these map directly to the UI elements discussed earlier on.
386 397
387 On top of that, you can also find an entry called 'plot_data', containing a 398 On top of that, you can also find an entry called 'plot_data', containing a
388 plottable history for most of these fields. If you have gnuplot installed, you 399 plottable history for most of these fields. If you have gnuplot installed, you
389 can turn this into a nice progress report with the included 'afl-plot' tool. 400 can turn this into a nice progress report with the included 'afl-plot' tool.
OLDNEW
« no previous file with comments | « third_party/afl/src/docs/sister_projects.txt ('k') | third_party/afl/src/docs/technical_details.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698