From: lijian Date: Tue, 7 Jul 2026 08:20:24 +0000 (+0200) Subject: sfdisk: fix memory leak in sfdisk_print_partition() X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6551e073bb772ceef19965a02621af0e1b77d1d5;p=thirdparty%2Futil-linux.git sfdisk: fix memory leak in sfdisk_print_partition() The function fdisk_partition_to_string() dynamically allocates memory for the returned string, but sfdisk_print_partition() never frees it. [karelzak@redhat.com: fix code style] Addresses: https://github.com/util-linux/util-linux/pull/4459 Signed-off-by: lijian Signed-off-by: Karel Zak --- diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c index 0a66bc5fc..d53e21300 100644 --- a/disk-utils/sfdisk.c +++ b/disk-utils/sfdisk.c @@ -1523,6 +1523,7 @@ static void sfdisk_print_partition(struct sfdisk *sf, size_t n) { struct fdisk_partition *pa = NULL; char *data; + int rc; assert(sf); @@ -1531,20 +1532,35 @@ static void sfdisk_print_partition(struct sfdisk *sf, size_t n) if (fdisk_get_partition(sf->cxt, n, &pa) != 0) return; - fdisk_partition_to_string(pa, sf->cxt, FDISK_FIELD_DEVICE, &data); - printf("%12s : ", data); + rc = fdisk_partition_to_string(pa, sf->cxt, FDISK_FIELD_DEVICE, &data); + if (rc == 0) { + printf("%12s : ", data); + free(data); + } - fdisk_partition_to_string(pa, sf->cxt, FDISK_FIELD_START, &data); - printf("%12s ", data); + rc = fdisk_partition_to_string(pa, sf->cxt, FDISK_FIELD_START, &data); + if (rc == 0) { + printf("%12s ", data); + free(data); + } - fdisk_partition_to_string(pa, sf->cxt, FDISK_FIELD_END, &data); - printf("%12s ", data); + rc = fdisk_partition_to_string(pa, sf->cxt, FDISK_FIELD_END, &data); + if (rc == 0) { + printf("%12s ", data); + free(data); + } - fdisk_partition_to_string(pa, sf->cxt, FDISK_FIELD_SIZE, &data); - printf("(%s) ", data); + rc = fdisk_partition_to_string(pa, sf->cxt, FDISK_FIELD_SIZE, &data); + if (rc == 0) { + printf("(%s) ", data); + free(data); + } - fdisk_partition_to_string(pa, sf->cxt, FDISK_FIELD_TYPE, &data); - printf("%s\n", data); + rc = fdisk_partition_to_string(pa, sf->cxt, FDISK_FIELD_TYPE, &data); + if (rc == 0) { + printf("%s\n", data); + free(data); + } fdisk_unref_partition(pa); }