qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: Darren Kenny
Subject: Re: [PATCH v4 06/20] module: check module wasn't already initialized
Date: Wed, 6 Nov 2019 17:40:51 +0000

On Wed, Oct 30, 2019 at 02:49:52PM +0000, Oleinik, Alexander wrote:
From: Alexander Oleinik <address@hidden>

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 <address@hidden>

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 <address@hidden>

---
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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]