瀏覽代碼

[PATCH] uml: fix big stack user

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>
Paolo 'Blaisorblade' Giarrusso 19 年之前
父節點
當前提交
87276f721a
共有 1 個文件被更改,包括 13 次插入10 次删除
  1. 13 10
      arch/um/os-Linux/mem.c

+ 13 - 10
arch/um/os-Linux/mem.c

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