From: Markus Armbruster Date: Fri, 14 Mar 2025 14:34:59 +0000 (+0100) Subject: hw/xen: Fix xen_bus_realize() error handling X-Git-Tag: v10.0.0-rc1~3^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=de7b18083bfed4e1a01bb40b4ad050c47d2011fa;p=thirdparty%2Fqemu.git 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 Message-ID: <20250314143500.2449658-2-armbru@redhat.com> Reviewed-by: Stefano Stabellini --- 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);