]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Kill.c
Fix memory leak in file Kill
[thirdparty/mdadm.git] / Kill.c
diff --git a/Kill.c b/Kill.c
index bfd0efdc0b1d463bda64756cb51a2f487ba58de3..43c9abed3b42b512448ca49cba943ba4ebe5603c 100644 (file)
--- a/Kill.c
+++ b/Kill.c
@@ -41,6 +41,7 @@ int Kill(char *dev, struct supertype *st, int force, int verbose, int noexcl)
         *  4 - failed to find a superblock.
         */
 
+       bool free_super = false;
        int fd, rv = 0;
 
        if (force)
@@ -52,8 +53,10 @@ int Kill(char *dev, struct supertype *st, int force, int verbose, int noexcl)
                                dev);
                return 2;
        }
-       if (st == NULL)
+       if (st == NULL) {
                st = guess_super(fd);
+               free_super = true;
+       }
        if (st == NULL || st->ss->init_super == NULL) {
                if (verbose >= 0)
                        pr_err("Unrecognised md component device - %s\n", dev);
@@ -77,6 +80,10 @@ int Kill(char *dev, struct supertype *st, int force, int verbose, int noexcl)
                        rv = 0;
                }
        }
+       if (free_super && st) {
+               st->ss->free_super(st);
+               free(st);
+       }
        close(fd);
        return rv;
 }