From 1a55b69a0f8028150a9c93455f24617bc7c8bd61 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Tue, 5 Jul 2022 11:28:11 +0200 Subject: [PATCH] Fix leak of dm target structure. The dmd_source need to be cleared with dm_targets_free(). --- lib/luks2/luks2_reencrypt.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/luks2/luks2_reencrypt.c b/lib/luks2/luks2_reencrypt.c index c5b575c5..50cece53 100644 --- a/lib/luks2/luks2_reencrypt.c +++ b/lib/luks2/luks2_reencrypt.c @@ -2850,15 +2850,18 @@ static int reencrypt_decrypt_with_datashift_init(struct crypt_device *cd, dmd_source.size = dmd_target.size; r = LUKS2_assembly_multisegment_dmd(cd, hdr, *vks, LUKS2_get_segments_jobj(hdr), &dmd_source); + if (!r) { + r = dm_reload_device(cd, name, &dmd_source, dmd_target.flags, 0); + if (r) + log_err(cd, _("Failed to reload device %s."), name); + else + clear_table = true; + } + + dm_targets_free(cd, &dmd_source); + if (r) goto out; - - r = dm_reload_device(cd, name, &dmd_source, dmd_target.flags, 0); - if (r) { - log_err(cd, _("Failed to reload device %s."), name); - goto out; - } - clear_table = true; } if (name) {