mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
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:
1 parent
6a6f3ff2c1
commit
7dfd103efb
2 files changed
+23
-13
No files matched your search
@@ -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);
|
||||
|
||||
|
||||