diff mbox series

[v4,06/20] module: check module wasn't already initialized

Message ID 20191030144926.11873-7-alxndr@bu.edu
State New
Headers show
Series Add virtual device fuzzing support | expand

Commit Message

Alexander Bulekov Oct. 30, 2019, 2:49 p.m. UTC
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(+)

Comments

Stefan Hajnoczi Nov. 6, 2019, 3:26 p.m. UTC | #1
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>
Darren Kenny Nov. 6, 2019, 5:40 p.m. UTC | #2
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 mbox series

Patch

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