[PATCH] uml: fix big stack user
authorPaolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Tue, 11 Apr 2006 05:53:39 +0000 (22:53 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Tue, 11 Apr 2006 13:18:37 +0000 (06:18 -0700)
Switch this proc from storing 4k of data (a whole path) on the stack to
keeping it on the heap.

Maybe it's not called in process context but only in early boot context (where
in UML you have a normal process stack on the host) but just to be safe, fix
it.

While at it some little readability simplifications.

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Cc: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/um/os-Linux/mem.c

index 6ab372da96579e4a49e372b920ff302d703484f2..71bb90a7606d0ebf8dab332fd874aa0e0f6d707b 100644 (file)
@@ -53,33 +53,36 @@ static void __init find_tempdir(void)
  */
 int make_tempfile(const char *template, char **out_tempname, int do_unlink)
 {
-       char tempname[MAXPATHLEN];
+       char *tempname;
        int fd;
 
+       tempname = malloc(MAXPATHLEN);
+
        find_tempdir();
-       if (*template != '/')
+       if (template[0] != '/')
                strcpy(tempname, tempdir);
        else
-               *tempname = 0;
+               tempname[0] = '\0';
        strcat(tempname, template);
        fd = mkstemp(tempname);
        if(fd < 0){
                fprintf(stderr, "open - cannot create %s: %s\n", tempname,
                        strerror(errno));
-               return -1;
+               goto out;
        }
        if(do_unlink && (unlink(tempname) < 0)){
                perror("unlink");
-               return -1;
+               goto out;
        }
        if(out_tempname){
-               *out_tempname = strdup(tempname);
-               if(*out_tempname == NULL){
-                       perror("strdup");
-                       return -1;
-               }
+               *out_tempname = tempname;
+       } else {
+               free(tempname);
        }
        return(fd);
+out:
+       free(tempname);
+       return -1;
 }
 
 #define TEMPNAME_TEMPLATE "vm_file-XXXXXX"