Message ID | 20191030144926.11873-7-alxndr@bu.edu (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add virtual device fuzzing support | expand |
On Wed, Oct 30, 2019 at 02:49:52PM +0000, Oleinik, Alexander wrote: > From: Alexander Oleinik <alxndr@bu.edu> > > The virtual-device fuzzer must initialize QOM, prior to running > vl:qemu_init, so that it can use the qos_graph to identify the arguments > required to initialize a guest for libqos-assisted fuzzing. This change > prevents errors when vl:qemu_init tries to (re)initialize the previously > initialized QOM module. > > Signed-off-by: Alexander Oleinik <alxndr@bu.edu> > --- > util/module.c | 7 +++++++ > 1 file changed, 7 insertions(+) Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
On Wed, Oct 30, 2019 at 02:49:52PM +0000, Oleinik, Alexander wrote: >From: Alexander Oleinik <alxndr@bu.edu> > >The virtual-device fuzzer must initialize QOM, prior to running >vl:qemu_init, so that it can use the qos_graph to identify the arguments >required to initialize a guest for libqos-assisted fuzzing. This change >prevents errors when vl:qemu_init tries to (re)initialize the previously >initialized QOM module. > >Signed-off-by: Alexander Oleinik <alxndr@bu.edu> My only question here really is whether there is any possibility of the list of any given module type being modified later, if so this might break things if attempts are made to re-init modules. In that case, this test might be more correctly belong in the module's own init() function instead. Assuming for now that it is the correct place to do it, unless someone can say otherwise: Reviewed-by: Darren Kenny <darren.kenny@oracle.com> >--- > util/module.c | 7 +++++++ > 1 file changed, 7 insertions(+) > >diff --git a/util/module.c b/util/module.c >index e9fe3e5422..841e490e06 100644 >--- a/util/module.c >+++ b/util/module.c >@@ -30,6 +30,7 @@ typedef struct ModuleEntry > typedef QTAILQ_HEAD(, ModuleEntry) ModuleTypeList; > > static ModuleTypeList init_type_list[MODULE_INIT_MAX]; >+static bool modules_init_done[MODULE_INIT_MAX]; > > static ModuleTypeList dso_init_list; > >@@ -91,11 +92,17 @@ void module_call_init(module_init_type type) > ModuleTypeList *l; > ModuleEntry *e; > >+ if (modules_init_done[type]) { >+ return; >+ } >+ > l = find_type(type); > > QTAILQ_FOREACH(e, l, node) { > e->init(); > } >+ >+ modules_init_done[type] = true; > } > > #ifdef CONFIG_MODULES >-- >2.23.0 > >
diff --git a/util/module.c b/util/module.c index e9fe3e5422..841e490e06 100644 --- a/util/module.c +++ b/util/module.c @@ -30,6 +30,7 @@ typedef struct ModuleEntry typedef QTAILQ_HEAD(, ModuleEntry) ModuleTypeList; static ModuleTypeList init_type_list[MODULE_INIT_MAX]; +static bool modules_init_done[MODULE_INIT_MAX]; static ModuleTypeList dso_init_list; @@ -91,11 +92,17 @@ void module_call_init(module_init_type type) ModuleTypeList *l; ModuleEntry *e; + if (modules_init_done[type]) { + return; + } + l = find_type(type); QTAILQ_FOREACH(e, l, node) { e->init(); } + + modules_init_done[type] = true; } #ifdef CONFIG_MODULES