tools/insn-fuzz: Accept fuzzing input on stdin

This is rather faster for afl-fuzz to arrange than using an explicit file
parameter.  Also update the README to recommend using a tmpfs for findings_dir
which reduces disk load and is more performant.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
Andrew Cooper committed 2017-03-20 16:45:20 +00:00
1 parent 6a6f3ff2c1
commit 7dfd103efb
2 files changed
+23 -13

No files matched your search

+5 -2
View File
@@ -25,8 +25,11 @@ Use the x86 instruction emulator fuzzer as an example.
$ dd if=/dev/urandom of=testcase_dir/rand.bin \
bs=`./afl-harness --min-input-size` count=1
3a. use a tmpfs for findings_dir (Perf improvement and reduced disk load)
$ mkdir findings_dir
$ mount -t tmpfs -o size=512M tmpfs findings_dir
4. run the fuzzer with AFL:
$ $AFLPATH/afl-fuzz -m none -t 1000 -i testcase_dir -o findings_dir -- \
./afl-harness @@
$ $AFLPATH/afl-fuzz -t 1000 -i testcase_dir -o findings_dir -- ./afl-harness
Please see AFL documentation for more information.
@@ -14,7 +14,7 @@ static uint8_t input[INPUT_SIZE];
int main(int argc, char **argv)
{
size_t size;
FILE *fp;
FILE *fp = NULL;
setbuf(stdout, NULL);
@@ -40,6 +40,7 @@ int main(int argc, char **argv)
break;
case '?':
usage:
printf("Usage: %s $FILE | [--min-input-size]\n", argv[0]);
exit(-1);
break;
@@ -51,17 +52,19 @@ int main(int argc, char **argv)
}
}
if ( optind != (argc - 1) )
{
printf("Expecting only one argument\n");
exit(-1);
}
if ( optind == argc ) /* No positional parameters. Use stdin. */
fp = stdin;
else if ( optind != (argc - 1) )
goto usage;
fp = fopen(argv[1], "rb");
if ( fp == NULL )
if ( fp != stdin ) /* If not using stdin, open the provided file. */
{
perror("fopen");
exit(-1);
fp = fopen(argv[optind], "rb");
if ( fp == NULL )
{
perror("fopen");
exit(-1);
}
}
size = fread(input, 1, INPUT_SIZE, fp);
@@ -78,7 +81,11 @@ int main(int argc, char **argv)
exit(-1);
}
fclose(fp);
if ( fp != stdin )
{
fclose(fp);
fp = NULL;
}
LLVMFuzzerTestOneInput(input, size);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.