On Thu, Jan 10, 2019 at 6:04 AM Eduardo Habkost <ehabk...@redhat.com> wrote: > > When handling errp==NULL at object_apply_global_props(), we are > leaving the old error value in `err` after printing a warning. > This makes QEMU crash if two global properties generate warnings: > > $ echo device_add rtl8139 | qemu-system-x86_64 -monitor stdio -global > rtl8139.xxx=yyy -global rtl8139.xxx=zzz > warning: can't apply global rtl8139.xxx=yyy: Property '.xxx' not found > qemu-system-x86_64: util/error.c:57: error_setv: Assertion `*errp == NULL' > failed. > Aborted (core dumped) > > Fix that by making `err` go out of scope immediately after the > warn_report_err() call. > > Fixes: 50545b2cc029 "qdev-props: call object_apply_global_props()" > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > qom/object.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/qom/object.c b/qom/object.c > index aa6f3a2a71..4e5226ca12 100644 > --- a/qom/object.c > +++ b/qom/object.c > @@ -372,7 +372,6 @@ static void object_post_init_with_type(Object *obj, > TypeImpl *ti) > > void object_apply_global_props(Object *obj, const GPtrArray *props, Error > **errp) > { > - Error *err = NULL; > int i; > > if (!props) { > @@ -381,6 +380,7 @@ void object_apply_global_props(Object *obj, const > GPtrArray *props, Error **errp > > for (i = 0; i < props->len; i++) { > GlobalProperty *p = g_ptr_array_index(props, i); > + Error *err = NULL; > > if (object_dynamic_cast(obj, p->driver) == NULL) { > continue; > -- > 2.18.0.rc1.1.g3f1ff2140 > > -- Marc-André Lureau