fuzz: register predefined generic-fuzz configs
We call get_generic_fuzz_configs, which fills an array with predefined {name, args, objects} triples. For each of these, we add a new FuzzTarget, that uses a small wrapper to set QEMU_FUZZ_{ARGS,OBJECTS} to the corresponding predefined values. Reviewed-by: Darren Kenny <darren.kenny@oracle.com> Signed-off-by: Alexander Bulekov <alxndr@bu.edu> Message-Id: <20201023150746.107063-16-alxndr@bu.edu> Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
61fc27e0df
commit
7fdb505384
@ -26,6 +26,7 @@
|
||||
#include "hw/qdev-core.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/boards.h"
|
||||
#include "generic_fuzz_configs.h"
|
||||
|
||||
/*
|
||||
* SEPARATOR is used to separate "operations" in the fuzz input
|
||||
@ -907,6 +908,17 @@ static GString *generic_fuzz_cmdline(FuzzTarget *t)
|
||||
return cmd_line;
|
||||
}
|
||||
|
||||
static GString *generic_fuzz_predefined_config_cmdline(FuzzTarget *t)
|
||||
{
|
||||
const generic_fuzz_config *config;
|
||||
g_assert(t->opaque);
|
||||
|
||||
config = t->opaque;
|
||||
setenv("QEMU_FUZZ_ARGS", config->args, 1);
|
||||
setenv("QEMU_FUZZ_OBJECTS", config->objects, 1);
|
||||
return generic_fuzz_cmdline(t);
|
||||
}
|
||||
|
||||
static void register_generic_fuzz_targets(void)
|
||||
{
|
||||
fuzz_add_target(&(FuzzTarget){
|
||||
@ -917,6 +929,26 @@ static void register_generic_fuzz_targets(void)
|
||||
.fuzz = generic_fuzz,
|
||||
.crossover = generic_fuzz_crossover
|
||||
});
|
||||
|
||||
GString *name;
|
||||
const generic_fuzz_config *config;
|
||||
|
||||
for (int i = 0;
|
||||
i < sizeof(predefined_configs) / sizeof(generic_fuzz_config);
|
||||
i++) {
|
||||
config = predefined_configs + i;
|
||||
name = g_string_new("generic-fuzz");
|
||||
g_string_append_printf(name, "-%s", config->name);
|
||||
fuzz_add_target(&(FuzzTarget){
|
||||
.name = name->str,
|
||||
.description = "Predefined generic-fuzz config.",
|
||||
.get_init_cmdline = generic_fuzz_predefined_config_cmdline,
|
||||
.pre_fuzz = generic_pre_fuzz,
|
||||
.fuzz = generic_fuzz,
|
||||
.crossover = generic_fuzz_crossover,
|
||||
.opaque = (void *)config
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
fuzz_target_init(register_generic_fuzz_targets);
|
||||
|
Loading…
x
Reference in New Issue
Block a user