On Thu, Dec 03, 2015 at 05:37:38PM +0100, Markus Armbruster wrote: > Since prop_get_fdt() is only used with QmpOutputVisitor, errors > shouldn't actually happen, so this is only a latent bug. > > Signed-off-by: Markus Armbruster <arm...@redhat.com>
Acked-by: David Gibson <da...@gibson.dropbear.id.au> > --- > hw/ppc/spapr_drc.c | 32 ++++++++++++++++++++++++++------ > 1 file changed, 26 insertions(+), 6 deletions(-) > > diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c > index f34bc04..4e7a1d3 100644 > --- a/hw/ppc/spapr_drc.c > +++ b/hw/ppc/spapr_drc.c > @@ -254,6 +254,7 @@ static void prop_get_fdt(Object *obj, Visitor *v, void > *opaque, > const char *name, Error **errp) > { > sPAPRDRConnector *drc = SPAPR_DR_CONNECTOR(obj); > + Error *err = NULL; > int fdt_offset_next, fdt_offset, fdt_depth; > void *fdt; > > @@ -276,24 +277,43 @@ static void prop_get_fdt(Object *obj, Visitor *v, void > *opaque, > case FDT_BEGIN_NODE: > fdt_depth++; > name = fdt_get_name(fdt, fdt_offset, &name_len); > - visit_start_struct(v, NULL, NULL, name, 0, NULL); > + visit_start_struct(v, NULL, NULL, name, 0, &err); > + if (err) { > + error_propagate(errp, err); > + return; > + } > break; > case FDT_END_NODE: > /* shouldn't ever see an FDT_END_NODE before FDT_BEGIN_NODE */ > g_assert(fdt_depth > 0); > - visit_end_struct(v, NULL); > + visit_end_struct(v, &err); > + if (err) { > + error_propagate(errp, err); > + return; > + } > fdt_depth--; > break; > case FDT_PROP: { > int i; > prop = fdt_get_property_by_offset(fdt, fdt_offset, &prop_len); > name = fdt_string(fdt, fdt32_to_cpu(prop->nameoff)); > - visit_start_list(v, name, NULL); > + visit_start_list(v, name, &err); > + if (err) { > + error_propagate(errp, err); > + return; > + } > for (i = 0; i < prop_len; i++) { > - visit_type_uint8(v, (uint8_t *)&prop->data[i], NULL, NULL); > - > + visit_type_uint8(v, (uint8_t *)&prop->data[i], NULL, &err); > + if (err) { > + error_propagate(errp, err); > + return; > + } > + } > + visit_end_list(v, &err); > + if (err) { > + error_propagate(errp, err); > + return; > } > - visit_end_list(v, NULL); > break; > } > default: -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature