After commit 03071031 ("kpartx: fix crash and truncated device creation
with long -p delimiter"), when attempting to remove deleted partitions
on kpartx -u, kpartx started calling dm_find_part() to check if the
partition existed before checking if the slice size was 0 (and thus
should get removed). The problem is that if dm_find_part() returns
DFP_DEVICE_RELOAD because the partition device exists, part_uuid gets
allocated, and if the slices[j].size is non-zero and the partition
device shouldn't be removed, part_uuid wasn't getting freed. Fix this by
reverting to checking the slice size first.
Fixes: 03071031 ("kpartx: fix crash and truncated device creation
with long -p delimiter")
Signed-off-by: Benjamin Marzinski <[email protected]>
---
kpartx/kpartx.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/kpartx/kpartx.c b/kpartx/kpartx.c
index fc8f9e5e..370d09a1 100644
--- a/kpartx/kpartx.c
+++ b/kpartx/kpartx.c
@@ -577,10 +577,11 @@ main(int argc, char **argv){
for (j = MAXSLICES-1; j >= 0; j--) {
char *part_uuid = NULL, *reason;
- int res = dm_find_part(mapname, delim, j + 1,
uuid,
- partname,
sizeof(partname),
- &part_uuid, verbose);
- if (slices[j].size || res != DFP_DEVICE_RELOAD)
+
+ if (slices[j].size ||
+ dm_find_part(mapname, delim, j + 1, uuid,
partname,
+ sizeof(partname), &part_uuid,
+ verbose) != DFP_DEVICE_RELOAD)
continue;
if (part_uuid && uuid) {
--
2.53.0