From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Vladimir Sementsov-Ogievskiy" <vsementsov@virtuozzo.com>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>
Subject: [PULL 08/34] hw/core: Fix fit_load_fdt() error API violations
Date: Tue, 17 Dec 2019 07:26:25 +0100 [thread overview]
Message-ID: <20191217062651.9687-9-armbru@redhat.com> (raw)
In-Reply-To: <20191217062651.9687-1-armbru@redhat.com>
fit_load_fdt() passes @errp to fit_image_addr(), then recovers from
ENOENT failures. Passing @errp is wrong, because it works only as
long as @errp is neither @error_fatal nor @error_abort. Error
recovery dereferences @errp. That's also wrong; see the big comment
in error.h. Error recovery can leave *errp pointing to a freed
Error object. Wrong, it must be null on success. Messed up in
commit 3eb99edb48 "loader-fit: Wean off error_printf()".
No caller actually passes such values, or uses *errp on success.
Fix anyway: splice in a local Error *err, and error_propagate().
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20191204093625.14836-8-armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
hw/core/loader-fit.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/hw/core/loader-fit.c b/hw/core/loader-fit.c
index 953b16bc82..c465921b8f 100644
--- a/hw/core/loader-fit.c
+++ b/hw/core/loader-fit.c
@@ -178,11 +178,12 @@ static int fit_load_fdt(const struct fit_loader *ldr, const void *itb,
int cfg, void *opaque, const void *match_data,
hwaddr kernel_end, Error **errp)
{
+ Error *err = NULL;
const char *name;
const void *data;
const void *load_data;
hwaddr load_addr;
- int img_off, err;
+ int img_off;
size_t sz;
int ret;
@@ -197,13 +198,13 @@ static int fit_load_fdt(const struct fit_loader *ldr, const void *itb,
return -EINVAL;
}
- err = fit_image_addr(itb, img_off, "load", &load_addr, errp);
- if (err == -ENOENT) {
+ ret = fit_image_addr(itb, img_off, "load", &load_addr, &err);
+ if (ret == -ENOENT) {
load_addr = ROUND_UP(kernel_end, 64 * KiB) + (10 * MiB);
- error_free(*errp);
- } else if (err) {
- error_prepend(errp, "unable to read FDT load address from FIT: ");
- ret = err;
+ error_free(err);
+ } else if (ret) {
+ error_propagate_prepend(errp, err,
+ "unable to read FDT load address from FIT: ");
goto out;
}
--
2.21.0
next prev parent reply other threads:[~2019-12-17 6:31 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-17 6:26 [PULL 00/34] Error reporting patches for 2019-12-16 Markus Armbruster
2019-12-17 6:26 ` [PULL 01/34] error: Fix -msg timestamp default Markus Armbruster
2019-12-17 6:26 ` [PULL 02/34] crypto: Fix certificate file error handling crash bug Markus Armbruster
2019-12-17 6:26 ` [PULL 03/34] crypto: Fix typo in QCryptoTLSSession's <example> comment Markus Armbruster
2019-12-17 6:26 ` [PULL 04/34] io: Fix Error usage in a comment <example> Markus Armbruster
2019-12-17 6:26 ` [PULL 05/34] tests: Clean up initialization of Error *err variables Markus Armbruster
2019-12-17 6:26 ` [PULL 06/34] exec: Fix file_ram_alloc() error API violations Markus Armbruster
2019-12-17 6:26 ` [PULL 07/34] hw/acpi: Fix legacy CPU plug " Markus Armbruster
2019-12-17 6:26 ` Markus Armbruster [this message]
2019-12-17 6:26 ` [PULL 09/34] hw/ipmi: Fix realize() " Markus Armbruster
2019-12-17 6:26 ` [PULL 10/34] qga: Fix guest-get-fsinfo " Markus Armbruster
2019-12-17 6:26 ` [PULL 11/34] memory-device: Fix memory pre-plug " Markus Armbruster
2019-12-17 6:26 ` [PULL 12/34] error: Clean up unusual names of Error * variables Markus Armbruster
2019-12-17 6:26 ` [PULL 13/34] hw/intc/s390: Simplify error handling in kvm_s390_flic_realize() Markus Armbruster
2019-12-17 6:26 ` [PULL 14/34] tests-blockjob: Use error_free_or_abort() Markus Armbruster
2019-12-17 6:26 ` [PULL 15/34] net/net: Clean up variable shadowing in net_client_init() Markus Armbruster
2019-12-17 6:26 ` [PULL 16/34] error: make Error **errp const where it is appropriate Markus Armbruster
2019-12-17 6:26 ` [PULL 17/34] hmp: drop Error pointer indirection in hmp_handle_error Markus Armbruster
2019-12-17 6:26 ` [PULL 18/34] vnc: drop Error pointer indirection in vnc_client_io_error Markus Armbruster
2019-12-17 6:26 ` [PULL 19/34] qdev-monitor: make Error **errp const where it is appropriate Markus Armbruster
2019-12-17 6:26 ` [PULL 20/34] ppc: " Markus Armbruster
2019-12-17 6:26 ` [PULL 21/34] 9pfs: " Markus Armbruster
2019-12-17 6:26 ` [PULL 22/34] hw/core/qdev: cleanup Error ** variables Markus Armbruster
2019-12-17 6:26 ` [PULL 23/34] block/snapshot: rename Error ** parameter to more common errp Markus Armbruster
2019-12-17 6:26 ` [PULL 24/34] hw/i386/amd_iommu: " Markus Armbruster
2019-12-17 6:26 ` [PULL 25/34] qga: " Markus Armbruster
2019-12-17 6:26 ` [PULL 26/34] monitor/qmp-cmds: " Markus Armbruster
2019-12-17 6:26 ` [PULL 27/34] hw/s390x: " Markus Armbruster
2019-12-17 6:26 ` [PULL 28/34] hw/sd: drop extra whitespace in sdhci_sysbus_realize() header Markus Armbruster
2019-12-17 6:26 ` [PULL 29/34] hw/tpm: rename Error ** parameter to more common errp Markus Armbruster
2019-12-17 6:26 ` [PULL 30/34] hw/usb: " Markus Armbruster
2019-12-17 6:26 ` [PULL 31/34] include/qom/object.h: " Markus Armbruster
2019-12-17 6:26 ` [PULL 32/34] backends/cryptodev: drop local_err from cryptodev_backend_complete() Markus Armbruster
2019-12-17 6:26 ` [PULL 33/34] hw/vfio/ap: drop local_err from vfio_ap_realize Markus Armbruster
2019-12-17 6:26 ` [PULL 34/34] nbd: assert that Error** is not NULL in nbd_iter_channel_error Markus Armbruster
2019-12-17 13:09 ` Eric Blake
2019-12-18 7:31 ` Markus Armbruster
2019-12-18 8:46 ` Markus Armbruster
2019-12-17 15:49 ` [PULL 00/34] Error reporting patches for 2019-12-16 Peter Maydell
2019-12-18 7:35 ` Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191217062651.9687-9-armbru@redhat.com \
--to=armbru@redhat.com \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=vsementsov@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.