diff options
| author | Markus Armbruster <armbru@redhat.com> | 2025-03-14 15:34:59 +0100 |
|---|---|---|
| committer | Markus Armbruster <armbru@redhat.com> | 2025-03-19 09:36:15 +0100 |
| commit | de7b18083bfed4e1a01bb40b4ad050c47d2011fa (patch) | |
| tree | 2c4d2a75c112e1eb78f021413a20df0d4671c265 /hw/xen/xen-bus.c | |
| parent | 1dd24ccf829db234e23156c68b013e038040bf94 (diff) | |
| download | focaccia-qemu-de7b18083bfed4e1a01bb40b4ad050c47d2011fa.tar.gz focaccia-qemu-de7b18083bfed4e1a01bb40b4ad050c47d2011fa.zip | |
hw/xen: Fix xen_bus_realize() error handling
The Error ** argument must be NULL, &error_abort, &error_fatal, or a pointer to a variable containing NULL. Passing an argument of the latter kind twice without clearing it in between is wrong: if the first call sets an error, it no longer points to NULL for the second call. xen_bus_realize() is wrong that way: it passes &local_err to xs_node_watch() in a loop. If this fails in more than one iteration, it can trip error_setv()'s assertion. Fix by clearing @local_err. Fixes: c4583c8c394e (xen-bus: reduce scope of backend watch) Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20250314143500.2449658-2-armbru@redhat.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Diffstat (limited to 'hw/xen/xen-bus.c')
| -rw-r--r-- | hw/xen/xen-bus.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/hw/xen/xen-bus.c b/hw/xen/xen-bus.c index 8260f1e1bb..2aacc1436f 100644 --- a/hw/xen/xen-bus.c +++ b/hw/xen/xen-bus.c @@ -357,6 +357,7 @@ static void xen_bus_realize(BusState *bus, Error **errp) error_reportf_err(local_err, "failed to set up '%s' enumeration watch: ", type[i]); + local_err = NULL; } g_free(node); |