6
6
7
7
Forkserver design by Jann Horn <[email protected] >
8
8
9
- Copyright 2013, 2014, 2015, 2016 Google Inc. All rights reserved.
9
+ Copyright 2013, 2014, 2015, 2016, 2017 Google Inc. All rights reserved.
10
10
11
11
Licensed under the Apache License, Version 2.0 (the "License");
12
12
you may not use this file except in compliance with the License.
@@ -121,6 +121,7 @@ EXP_ST u8 skip_deterministic, /* Skip deterministic stages? */
121
121
skip_requested , /* Skip request, via SIGUSR1 */
122
122
run_over10m , /* Run time over 10 minutes? */
123
123
persistent_mode , /* Running in persistent mode? */
124
+ deferred_mode , /* Deferred forkserver mode? */
124
125
fast_cal ; /* Try to calibrate faster? */
125
126
126
127
static s32 out_fd , /* Persistent fd for out_file */
@@ -3428,6 +3429,7 @@ static void write_stats_file(double bitmap_cvg, double stability, double eps) {
3428
3429
"exec_timeout : %u\n"
3429
3430
"afl_banner : %s\n"
3430
3431
"afl_version : " VERSION "\n"
3432
+ "target_mode : %s%s%s%s%s%s%s\n"
3431
3433
"command_line : %s\n" ,
3432
3434
start_time / 1000 , get_cur_time () / 1000 , getpid (),
3433
3435
queue_cycle ? (queue_cycle - 1 ) : 0 , total_execs , eps ,
@@ -3436,7 +3438,13 @@ static void write_stats_file(double bitmap_cvg, double stability, double eps) {
3436
3438
queued_variable , stability , bitmap_cvg , unique_crashes ,
3437
3439
unique_hangs , last_path_time / 1000 , last_crash_time / 1000 ,
3438
3440
last_hang_time / 1000 , total_execs - last_crash_execs ,
3439
- exec_tmout , use_banner , orig_cmdline );
3441
+ exec_tmout , use_banner ,
3442
+ qemu_mode ? "qemu " : "" , dumb_mode ? " dumb " : "" ,
3443
+ no_forkserver ? "no_forksrv " : "" , crash_mode ? "crash " : "" ,
3444
+ persistent_mode ? "persistent " : "" , deferred_mode ? "deferred " : "" ,
3445
+ (qemu_mode || dumb_mode || no_forkserver || crash_mode ||
3446
+ persistent_mode || deferred_mode ) ? "" : "default" ,
3447
+ orig_cmdline );
3440
3448
/* ignore errors */
3441
3449
3442
3450
fclose (f );
@@ -6946,6 +6954,7 @@ EXP_ST void check_binary(u8* fname) {
6946
6954
6947
6955
OKF (cPIN "Deferred forkserver binary detected." );
6948
6956
setenv (DEFER_ENV_VAR , "1" , 1 );
6957
+ deferred_mode = 1 ;
6949
6958
6950
6959
} else if (getenv ("AFL_DEFER_FORKSRV" )) {
6951
6960
@@ -7596,6 +7605,10 @@ static char** get_qemu_argv(u8* own_loc, char** argv, int argc) {
7596
7605
char * * new_argv = ck_alloc (sizeof (char * ) * (argc + 4 ));
7597
7606
u8 * tmp , * cp , * rsl , * own_copy ;
7598
7607
7608
+ /* Workaround for a QEMU stability glitch. */
7609
+
7610
+ setenv ("QEMU_LOG" , "nochain" , 1 );
7611
+
7599
7612
memcpy (new_argv + 3 , argv + 1 , sizeof (char * ) * argc );
7600
7613
7601
7614
new_argv [2 ] = target_path ;
0 commit comments