aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorEduardo Habkost <ehabkost@redhat.com>2017-06-08 10:39:02 -0300
committerMarkus Armbruster <armbru@redhat.com>2017-07-13 13:45:53 +0200
commita9859c90a5db200fd4f63ab2cdc973343348b9ef (patch)
treeb6b4df511b6b2c84d26e6cfd9cf15855a88818a0 /hw
parent31fe1c414501047cbb91b695bdccc0068496dcf6 (diff)
downloadqemu-a9859c90a5db200fd4f63ab2cdc973343348b9ef.zip
qemu-a9859c90a5db200fd4f63ab2cdc973343348b9ef.tar.gz
qemu-a9859c90a5db200fd4f63ab2cdc973343348b9ef.tar.bz2
xilinx: Fix latent error handling bug
Assigning directly to *errp is not valid, as errp may be null, &error_fatal, or &error_abort. The !*errp conditional protects against the latter two, but we then leak @local_err. Fortunately, the qdev core always passes pointer to null, so this is "merely" a latent bug. Use error_propagate() instead. Cc: "Edgar E. Iglesias" <edgar.iglesias@gmail.com> Cc: Alistair Francis <alistair.francis@xilinx.com> Cc: Jason Wang <jasowang@redhat.com> Cc: qemu-arm@nongnu.org Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Message-Id: <20170608133906.12737-2-ehabkost@redhat.com> Reviewed-by: Alistair Francis <alistair.francis@xilinx.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> [Commit message clarified] Signed-off-by: Markus Armbruster <armbru@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/dma/xilinx_axidma.c4
-rw-r--r--hw/net/xilinx_axienet.c4
2 files changed, 2 insertions, 6 deletions
diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c
index 6065689..3987b5f 100644
--- a/hw/dma/xilinx_axidma.c
+++ b/hw/dma/xilinx_axidma.c
@@ -554,9 +554,7 @@ static void xilinx_axidma_realize(DeviceState *dev, Error **errp)
return;
xilinx_axidma_realize_fail:
- if (!*errp) {
- *errp = local_err;
- }
+ error_propagate(errp, local_err);
}
static void xilinx_axidma_init(Object *obj)
diff --git a/hw/net/xilinx_axienet.c b/hw/net/xilinx_axienet.c
index b670184..5ffa739 100644
--- a/hw/net/xilinx_axienet.c
+++ b/hw/net/xilinx_axienet.c
@@ -981,9 +981,7 @@ static void xilinx_enet_realize(DeviceState *dev, Error **errp)
return;
xilinx_enet_realize_fail:
- if (!*errp) {
- *errp = local_err;
- }
+ error_propagate(errp, local_err);
}
static void xilinx_enet_init(Object *obj)