Message ID | 20250314143500.2449658-2-armbru@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | xen: An error handling fix | expand |
On Fri, 14 Mar 2025, Markus Armbruster wrote: > 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> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> > --- > 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 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); > -- > 2.48.1 >
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);
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> --- hw/xen/xen-bus.c | 1 + 1 file changed, 1 insertion(+)