[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 28/28] migration/rdma: Plug memory leaks in qemu_rdma_registration
From: |
Markus Armbruster |
Subject: |
[PULL 28/28] migration/rdma: Plug memory leaks in qemu_rdma_registration_stop() |
Date: |
Thu, 2 Jul 2020 13:09:31 +0200 |
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>
Message-Id: <20200630090351.1247703-27-armbru@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@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
- [PULL 02/28] hw/virtio/virtio-iommu-pci.c: Fix typo in error message, (continued)
- [PULL 02/28] hw/virtio/virtio-iommu-pci.c: Fix typo in error message, Markus Armbruster, 2020/07/02
- [PULL 15/28] qdev: Drop qbus_set_bus_hotplug_handler() parameter @errp, Markus Armbruster, 2020/07/02
- [PULL 14/28] aspeed: Clean up roundabout error propagation, Markus Armbruster, 2020/07/02
- [PULL 20/28] riscv_hart: Fix riscv_harts_realize() error API violations, Markus Armbruster, 2020/07/02
- [PULL 08/28] usb/dev-mtp: Fix Error double free after inotify failure, Markus Armbruster, 2020/07/02
- [PULL 22/28] x86: Fix x86_cpu_new() error handling, Markus Armbruster, 2020/07/02
- [PULL 10/28] qga: Plug unlikely memory leak in guest-set-memory-blocks, Markus Armbruster, 2020/07/02
- [PULL 11/28] sd/milkymist-memcard: Plug minor memory leak in realize, Markus Armbruster, 2020/07/02
- [PULL 13/28] vnc: Plug minor memory leak in vnc_display_open(), Markus Armbruster, 2020/07/02
- [PULL 16/28] qdev: Drop qbus_set_hotplug_handler() parameter @errp, Markus Armbruster, 2020/07/02
- [PULL 28/28] migration/rdma: Plug memory leaks in qemu_rdma_registration_stop(),
Markus Armbruster <=
- [PULL 19/28] riscv/sifive_u: Fix sifive_u_soc_realize() error API violations, Markus Armbruster, 2020/07/02
- [PULL 03/28] net/virtio: Fix failover_replug_primary() return value regression, Markus Armbruster, 2020/07/02
- [PULL 04/28] pci: Delete useless error_propagate(), Markus Armbruster, 2020/07/02
- [PULL 23/28] amd_iommu: Fix amdvi_realize() error API violation, Markus Armbruster, 2020/07/02
- [PULL 05/28] Clean up some calls to ignore Error objects the right way, Markus Armbruster, 2020/07/02
- [PULL 24/28] arm/stm32f205 arm/stm32f405: Fix realize error API violation, Markus Armbruster, 2020/07/02
- [PULL 25/28] aspeed: Fix realize error API violation, Markus Armbruster, 2020/07/02
- [PULL 09/28] spapr: Plug minor memory leak in spapr_machine_init(), Markus Armbruster, 2020/07/02
- [PULL 27/28] arm/{bcm2835, fsl-imx25, fsl-imx6}: Fix realize error API violations, Markus Armbruster, 2020/07/02
- [PULL 18/28] hw/arm: Drop useless object_property_set_link() error handling, Markus Armbruster, 2020/07/02