From: George Dunlap Date: Wed, 11 Oct 2017 17:49:37 +0000 (+0100) Subject: fuzz/x86_emulate: Clear errors in the officially sanctioned way X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~1114 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=cf72cfb0c8513c3f83dc9541312b12e7325f5c02;p=xen.git fuzz/x86_emulate: Clear errors in the officially sanctioned way Commit 849a1f10c9 was checked in inappropriately; review flagged up that clearerr() was too big a hammer, as it would clear both the EOF flag and stream errors. Stream errors shouldn't be cleared; we only want the EOF and other stream-related state reset. To do this, it is sufficient to fseek() to zero. Signed-off-by: George Dunlap Acked-by: Andrew Cooper --- diff --git a/tools/fuzz/x86_instruction_emulator/afl-harness.c b/tools/fuzz/x86_instruction_emulator/afl-harness.c index b4d15451b5..31ae1daef1 100644 --- a/tools/fuzz/x86_instruction_emulator/afl-harness.c +++ b/tools/fuzz/x86_instruction_emulator/afl-harness.c @@ -77,6 +77,17 @@ int main(int argc, char **argv) exit(-1); } } +#ifdef __AFL_HAVE_MANUAL_CONTROL + else + { + /* + * This will ensure we're dealing with a clean stream + * state after the afl-fuzz process messes with the open + * file handle. + */ + fseek(fp, 0, SEEK_SET); + } +#endif size = fread(input, 1, INPUT_SIZE, fp); @@ -97,8 +108,6 @@ int main(int argc, char **argv) fclose(fp); fp = NULL; } - else - clearerr(fp); LLVMFuzzerTestOneInput(input, size); }