44 lines
1.5 KiB
Diff
44 lines
1.5 KiB
Diff
|
|
From 5eb0bb1f8ce9835b368e78d414ff6136c77ef94b Mon Sep 17 00:00:00 2001
|
||
|
|
From: qihao_yewu <qihao_yewu@cmss.chinamobile.com>
|
||
|
|
Date: Tue, 8 Apr 2025 06:51:26 -0400
|
||
|
|
Subject: [PATCH] hw/xen: Fix xen_bus_realize() error handling
|
||
|
|
|
||
|
|
cheery-pick from de7b18083bfed4e1a01bb40b4ad050c47d2011fa
|
||
|
|
|
||
|
|
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>
|
||
|
|
Signed-off-by: qihao_yewu <qihao_yewu@cmss.chinamobile.com>
|
||
|
|
---
|
||
|
|
hw/xen/xen-bus.c | 1 +
|
||
|
|
1 file changed, 1 insertion(+)
|
||
|
|
|
||
|
|
diff --git a/hw/xen/xen-bus.c b/hw/xen/xen-bus.c
|
||
|
|
index 4973e7d9c9..c10b089914 100644
|
||
|
|
--- a/hw/xen/xen-bus.c
|
||
|
|
+++ b/hw/xen/xen-bus.c
|
||
|
|
@@ -352,6 +352,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);
|
||
|
|
--
|
||
|
|
2.41.0.windows.1
|
||
|
|
|