fuzz: enable dynamic args for generic-fuzz configs

For some device configurations, it is useful to configure some
resources, and adjust QEMU arguments at runtime, prior to fuzzing. This
patch adds an "argfunc" to generic the generic_fuzz_config. When
specified, it is responsible for configuring the resources and returning
a string containing the corresponding QEMU arguments. This can be useful
for targets that rely on e.g.:
 * a temporary qcow2 image
 * a temporary directory
 * an unused TCP port used to bind the VNC server

Signed-off-by: Alexander Bulekov <alxndr@bu.edu>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20210117230924.449676-2-alxndr@bu.edu>
master
Alexander Bulekov 2021-01-17 18:09:22 -05:00 committed by Paolo Bonzini
parent 61f90e0461
commit 8630b43f11
2 changed files with 10 additions and 1 deletions

View File

@ -933,12 +933,20 @@ static GString *generic_fuzz_cmdline(FuzzTarget *t)
static GString *generic_fuzz_predefined_config_cmdline(FuzzTarget *t)
{
gchar *args;
const generic_fuzz_config *config;
g_assert(t->opaque);
config = t->opaque;
setenv("QEMU_AVOID_DOUBLE_FETCH", "1", 1);
setenv("QEMU_FUZZ_ARGS", config->args, 1);
if (config->argfunc) {
args = config->argfunc();
setenv("QEMU_FUZZ_ARGS", args, 1);
g_free(args);
} else {
g_assert_nonnull(config->args);
setenv("QEMU_FUZZ_ARGS", config->args, 1);
}
setenv("QEMU_FUZZ_OBJECTS", config->objects, 1);
return generic_fuzz_cmdline(t);
}

View File

@ -16,6 +16,7 @@
typedef struct generic_fuzz_config {
const char *name, *args, *objects;
gchar* (*argfunc)(void); /* Result must be freeable by g_free() */
} generic_fuzz_config;
const generic_fuzz_config predefined_configs[] = {