From 1b603069db4b48ac05609efcf4a4672f69a3905d Mon Sep 17 00:00:00 2001 From: Matt Johnston Date: Mon, 26 Oct 2020 23:44:43 +0800 Subject: [PATCH] Fix fuzzing stderr override on os x --- fuzz.h | 10 ++++++++-- fuzz/fuzz-common.c | 13 +++++++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/fuzz.h b/fuzz.h index f25a835..ae781df 100644 --- a/fuzz.h +++ b/fuzz.h @@ -74,18 +74,24 @@ struct dropbear_fuzz_options { int recv_dumpfd; // avoid filling fuzzing logs, this points to /dev/null - FILE *stderr; + FILE *fake_stderr; }; extern struct dropbear_fuzz_options fuzz; +/* guard for when fuzz.h is included by fuzz-common.c */ +#ifndef FUZZ_NO_REPLACE_STDERR + /* This is a bodge but seems to work. glibc stdio.h has the comment "C89/C99 say they're macros. Make them happy." */ +/* OS X has it as a macro */ #ifdef stderr #undef stderr #endif -#define stderr (fuzz.stderr) +#define stderr (fuzz.fake_stderr) + +#endif /* FUZZ_NO_REPLACE_STDERR */ #endif // DROPBEAR_FUZZ diff --git a/fuzz/fuzz-common.c b/fuzz/fuzz-common.c index f741919..a147710 100644 --- a/fuzz/fuzz-common.c +++ b/fuzz/fuzz-common.c @@ -1,7 +1,6 @@ #include "includes.h" #include "includes.h" -#include "fuzz.h" #include "dbutil.h" #include "runopts.h" #include "crypto_desc.h" @@ -11,8 +10,14 @@ #include "atomicio.h" #include "fuzz-wrapfd.h" +#define FUZZ_NO_REPLACE_STDERR +#include "fuzz.h" + /* fuzz.h redefines stderr, we don't want that here */ +#ifdef origstderr #undef stderr +#define stderr origstderr +#endif // origstderr struct dropbear_fuzz_options fuzz; @@ -23,7 +28,7 @@ static void load_fixed_client_key(void); // This runs automatically before main, due to contructor attribute in fuzz.h void fuzz_early_setup(void) { /* Set stderr to point to normal stderr by default */ - fuzz.stderr = stderr; + fuzz.fake_stderr = stderr; } void fuzz_common_setup(void) { @@ -50,8 +55,8 @@ void fuzz_common_setup(void) { else { fprintf(stderr, "Dropbear fuzzer: Disabling stderr output\n"); - fuzz.stderr = fopen("/dev/null", "w"); - assert(fuzz.stderr); + fuzz.fake_stderr = fopen("/dev/null", "w"); + assert(fuzz.fake_stderr); } }