* libparted/fs/r/hfs/hfs.c(hfsplus_resize): Don't leak embedded_geom
  when volume resizing failed.
* libparted/fs/fat/fat.c(fat_create): Don't leake fs in-case of
  fat_write_clustor failuer.
* libparted/arch/linux.c(_kernel_get_partition_start_and_length): Don't leak
  dev_fd file descriptor.

Signed-off-by: Amarnath Valluri <[email protected]>
---
 libparted/arch/linux.c   | 1 +
 libparted/fs/r/fat/fat.c | 2 +-
 libparted/fs/r/hfs/hfs.c | 1 +
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
index 27bbb80..349442b 100644
--- a/libparted/arch/linux.c
+++ b/libparted/arch/linux.c
@@ -2665,6 +2665,7 @@ _kernel_get_partition_start_and_length(PedPartition const 
*part,
                 int dev_fd = open (dev_name, O_RDONLY);
                 if (dev_fd != -1 && ioctl (dev_fd, HDIO_GETGEO, &geom)) {
                         *start = geom.start;
+                        close (dev_fd);
                         ok = true;
                 } else {
                         if (dev_fd != -1)
diff --git a/libparted/fs/r/fat/fat.c b/libparted/fs/r/fat/fat.c
index 5aa72d8..4ecf5c5 100644
--- a/libparted/fs/r/fat/fat.c
+++ b/libparted/fs/r/fat/fat.c
@@ -305,7 +305,7 @@ fat_create (PedGeometry* geom, FatType fat_type, PedTimer* 
timer)
                memset (fs_info->buffer, 0, fs_info->cluster_size);
                if (!fat_write_cluster (fs, fs_info->buffer,
                                        fs_info->root_cluster))
-                       return 0;
+                       goto error_free_buffers;
        }
 
        fs_info->serial_number = generate_random_uint32 ();
diff --git a/libparted/fs/r/hfs/hfs.c b/libparted/fs/r/hfs/hfs.c
index a1c37cc..61edcbb 100644
--- a/libparted/fs/r/hfs/hfs.c
+++ b/libparted/fs/r/hfs/hfs.c
@@ -985,6 +985,7 @@ hfsplus_resize (PedFileSystem* fs, PedGeometry* geom, 
PedTimer* timer)
        /* Resize the HFS+ volume */
        if (!hfsplus_volume_resize (fs, embedded_geom, timer_plus)) {
                if (timer_plus != timer) ped_timer_destroy_nested (timer_plus);
+               ped_geometry_destroy (embedded_geom);
                ped_exception_throw (
                        PED_EXCEPTION_ERROR,
                        PED_EXCEPTION_CANCEL,
-- 
1.9.1

---------------------------------------------------------------------
Intel Finland Oy
Registered Address: PL 281, 00181 Helsinki 
Business Identity Code: 0357606 - 4 
Domiciled in Helsinki 

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.


Reply via email to