uml: free resources
Davidlohr Bueso [Tue, 26 Jul 2011 00:12:52 +0000 (17:12 -0700)]
When creating the temp file there's a memory and file descriptor leak upon
error.

Signed-off-by: Davidlohr Bueso <dave@gnu.org>
Signed-off-by: Richard Weinberger <richard@nod.at>
Reviewed-by: Vitaliy Ivanov <vitalivanov@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

arch/um/os-Linux/mem.c

index e696144..62878cf 100644 (file)
@@ -176,7 +176,7 @@ static int __init make_tempfile(const char *template, char **out_tempname,
 
        find_tempdir();
        if ((tempdir == NULL) || (strlen(tempdir) >= MAXPATHLEN))
-               return -1;
+               goto out;
 
        if (template[0] != '/')
                strcpy(tempname, tempdir);
@@ -191,13 +191,15 @@ static int __init make_tempfile(const char *template, char **out_tempname,
        }
        if (do_unlink && (unlink(tempname) < 0)) {
                perror("unlink");
-               goto out;
+               goto close;
        }
        if (out_tempname) {
                *out_tempname = tempname;
        } else
                free(tempname);
        return fd;
+close:
+       close(fd);
 out:
        free(tempname);
        return -1;