From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Dr . David Alan Gilbert" <dgilbert@redhat.com>,
Juan Quintela <quintela@redhat.com>
Subject: [PATCH v3 26/26] migration/rdma: Plug memory leaks in qemu_rdma_registration_stop()
Date: Tue, 30 Jun 2020 11:03:51 +0200 [thread overview]
Message-ID: <20200630090351.1247703-27-armbru@redhat.com> (raw)
In-Reply-To: <20200630090351.1247703-1-armbru@redhat.com>
qemu_rdma_registration_stop() uses the ERROR() macro to create, report
to stderr, and store an Error object. The stored Error object is
never used, and its memory is leaked.
Even where ERROR() doesn't leak, it is ill-advised. The whole point
of passing an Error to the caller is letting the caller handle the
error. Error handling may report to stderr, to somewhere else, or not
at all. Also reporting in the callee mixes up concerns that should be
kept separate. Since I don't know what reporting to stderr is
supposed to accomplish, I'm not touching it.
Commit 2a1bc8bde7 "migration/rdma: rdma_accept_incoming_migration fix
error handling" plugged the same leak in
rdma_accept_incoming_migration().
Plug the memory leak the same way: keep the report part, delete the
store part.
The report part uses fprintf(). If it's truly an error, it should use
error_report() instead. But I don't know, so I leave it alone, just
like commit 2a1bc8bde7 did.
Fixes: 2da776db4846eadcb808598a5d3484d149773c05
Cc: Dr. David Alan Gilbert <dgilbert@redhat.com>
Cc: Juan Quintela <quintela@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
migration/rdma.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/migration/rdma.c b/migration/rdma.c
index ec45d33ba3..3b18823268 100644
--- a/migration/rdma.c
+++ b/migration/rdma.c
@@ -3787,7 +3787,6 @@ static int qemu_rdma_registration_start(QEMUFile *f, void *opaque,
static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque,
uint64_t flags, void *data)
{
- Error *local_err = NULL, **errp = &local_err;
QIOChannelRDMA *rioc = QIO_CHANNEL_RDMA(opaque);
RDMAContext *rdma;
RDMAControlHeader head = { .len = 0, .repeat = 1 };
@@ -3832,7 +3831,7 @@ static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque,
®_result_idx, rdma->pin_all ?
qemu_rdma_reg_whole_ram_blocks : NULL);
if (ret < 0) {
- ERROR(errp, "receiving remote info!");
+ fprintf(stderr, "receiving remote info!");
return ret;
}
@@ -3851,10 +3850,10 @@ static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque,
*/
if (local->nb_blocks != nb_dest_blocks) {
- ERROR(errp, "ram blocks mismatch (Number of blocks %d vs %d) "
- "Your QEMU command line parameters are probably "
- "not identical on both the source and destination.",
- local->nb_blocks, nb_dest_blocks);
+ fprintf(stderr, "ram blocks mismatch (Number of blocks %d vs %d) "
+ "Your QEMU command line parameters are probably "
+ "not identical on both the source and destination.",
+ local->nb_blocks, nb_dest_blocks);
rdma->error_state = -EINVAL;
return -EINVAL;
}
@@ -3867,10 +3866,10 @@ static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque,
/* We require that the blocks are in the same order */
if (rdma->dest_blocks[i].length != local->block[i].length) {
- ERROR(errp, "Block %s/%d has a different length %" PRIu64
- "vs %" PRIu64, local->block[i].block_name, i,
- local->block[i].length,
- rdma->dest_blocks[i].length);
+ fprintf(stderr, "Block %s/%d has a different length %" PRIu64
+ "vs %" PRIu64, local->block[i].block_name, i,
+ local->block[i].length,
+ rdma->dest_blocks[i].length);
rdma->error_state = -EINVAL;
return -EINVAL;
}
--
2.26.2
next prev parent reply other threads:[~2020-06-30 9:07 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-30 9:03 [PATCH v3 00/26] Error handling fixes & cleanups Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 01/26] net/virtio: Fix failover_replug_primary() return value regression Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 02/26] pci: Delete useless error_propagate() Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 03/26] Clean up some calls to ignore Error objects the right way Markus Armbruster
2020-06-30 9:21 ` Daniel P. Berrangé
2020-06-30 9:03 ` [PATCH v3 04/26] tests: Use &error_abort where appropriate Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 05/26] tests: Use error_free_or_abort() " Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 06/26] usb/dev-mtp: Fix Error double free after inotify failure Markus Armbruster
2020-06-30 9:20 ` Daniel P. Berrangé
2020-06-30 9:03 ` [PATCH v3 07/26] spapr: Plug minor memory leak in spapr_machine_init() Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 08/26] qga: Plug unlikely memory leak in guest-set-memory-blocks Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 09/26] sd/milkymist-memcard: Plug minor memory leak in realize Markus Armbruster
2020-06-30 9:10 ` Philippe Mathieu-Daudé
2020-06-30 9:03 ` [PATCH v3 10/26] test-util-filemonitor: Plug unlikely memory leak Markus Armbruster
2020-06-30 9:20 ` Daniel P. Berrangé
2020-06-30 9:03 ` [PATCH v3 11/26] vnc: Plug minor memory leak in vnc_display_open() Markus Armbruster
2020-06-30 9:19 ` Daniel P. Berrangé
2020-06-30 9:03 ` [PATCH v3 12/26] aspeed: Clean up roundabout error propagation Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 13/26] qdev: Drop qbus_set_bus_hotplug_handler() parameter @errp Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 14/26] qdev: Drop qbus_set_hotplug_handler() " Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 15/26] hw: Fix error API violation around object_property_set_link() Markus Armbruster
2020-06-30 20:04 ` Mark Cave-Ayland
2020-06-30 9:03 ` [PATCH v3 16/26] hw/arm: Drop useless object_property_set_link() error handling Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 17/26] riscv/sifive_u: Fix sifive_u_soc_realize() error API violations Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 18/26] riscv_hart: Fix riscv_harts_realize() " Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 19/26] mips/cps: Fix mips_cps_realize() " Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 20/26] x86: Fix x86_cpu_new() error handling Markus Armbruster
2020-07-02 4:51 ` Markus Armbruster
2020-07-02 8:59 ` Paolo Bonzini
2020-06-30 9:03 ` [PATCH v3 21/26] amd_iommu: Fix amdvi_realize() error API violation Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 22/26] arm/stm32f205 arm/stm32f405: Fix realize " Markus Armbruster
2020-06-30 9:14 ` Philippe Mathieu-Daudé
2020-07-01 7:24 ` Markus Armbruster
2020-06-30 9:03 ` [PATCH v3 23/26] aspeed: " Markus Armbruster
2020-06-30 9:15 ` Philippe Mathieu-Daudé
2020-06-30 9:03 ` [PATCH v3 24/26] hw/arm/armsse: Fix armsse_realize() " Markus Armbruster
2020-06-30 9:11 ` Philippe Mathieu-Daudé
2020-06-30 9:03 ` [PATCH v3 25/26] arm/{bcm2835, fsl-imx25, fsl-imx6}: Fix realize error API violations Markus Armbruster
2020-06-30 9:12 ` [PATCH v3 25/26] arm/{bcm2835,fsl-imx25,fsl-imx6}: " Philippe Mathieu-Daudé
2020-06-30 9:03 ` Markus Armbruster [this message]
2020-06-30 9:33 ` [PATCH v3 26/26] migration/rdma: Plug memory leaks in qemu_rdma_registration_stop() Dr. David Alan Gilbert
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=20200630090351.1247703-27-armbru@redhat.com \
--to=armbru@redhat.com \
--cc=dgilbert@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).