]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Create: add_disk_to_super() fix resource leak
authorMateusz Kusiak <mateusz.kusiak@intel.com>
Tue, 20 Feb 2024 10:56:07 +0000 (11:56 +0100)
committerMariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
Fri, 23 Feb 2024 11:43:07 +0000 (12:43 +0100)
Fixes resource leak in add_disk_to_super().

Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
Create.c

index 8082f54a8fdcbe5ec94109ffdac5588240ef180f..7e9170b6a1ac3b1125a54018d9f026d705af31d7 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -279,8 +279,10 @@ static int add_disk_to_super(int mdfd, struct shape *s, struct context *c,
                               dv->devname);
                        return 1;
                }
-               if (!fstat_is_blkdev(fd, dv->devname, &rdev))
+               if (!fstat_is_blkdev(fd, dv->devname, &rdev)) {
+                       close(fd);
                        return 1;
+               }
                info->disk.major = major(rdev);
                info->disk.minor = minor(rdev);
        }
@@ -289,6 +291,7 @@ static int add_disk_to_super(int mdfd, struct shape *s, struct context *c,
        if (st->ss->add_to_super(st, &info->disk, fd, dv->devname,
                                 dv->data_offset)) {
                ioctl(mdfd, STOP_ARRAY, NULL);
+               close(fd);
                return 1;
        }
        st->ss->getinfo_super(st, info, NULL);
@@ -297,6 +300,7 @@ static int add_disk_to_super(int mdfd, struct shape *s, struct context *c,
                *zero_pid = write_zeroes_fork(fd, s, st, dv);
                if (*zero_pid <= 0) {
                        ioctl(mdfd, STOP_ARRAY, NULL);
+                       close(fd);
                        return 1;
                }
        }