]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
sfdisk: fix memory leak in sfdisk_print_partition()
authorlijian <lijian01@kylinos.cn>
Tue, 7 Jul 2026 08:20:24 +0000 (10:20 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 7 Jul 2026 08:20:24 +0000 (10:20 +0200)
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 <lijian01@kylinos.cn>
Signed-off-by: Karel Zak <kzak@redhat.com>
disk-utils/sfdisk.c

index 0a66bc5fcf3bfcc3f70b9da928bd3e555e4da303..d53e21300466a4704b024a65135f6893236f84e0 100644 (file)
@@ -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);
 }