Bläddra i källkod

fix fd leak in tmpfile when the fdopen operation fails

this condition could only happen due to malloc failure.

the fdopen operation is also moved to take place after the unlink to
minimize the window during which a link to the file exists in the
directory table.
Rich Felker 10 år sedan
förälder
incheckning
60158bff74
1 ändrade filer med 2 tillägg och 1 borttagningar
  1. 2 1
      src/stdio/tmpfile.c

+ 2 - 1
src/stdio/tmpfile.c

@@ -16,12 +16,13 @@ FILE *tmpfile(void)
 		__randname(s+13);
 		__randname(s+13);
 		fd = sys_open(s, O_RDWR|O_CREAT|O_EXCL, 0600);
 		fd = sys_open(s, O_RDWR|O_CREAT|O_EXCL, 0600);
 		if (fd >= 0) {
 		if (fd >= 0) {
-			f = __fdopen(fd, "w+");
 #ifdef SYS_unlink
 #ifdef SYS_unlink
 			__syscall(SYS_unlink, s);
 			__syscall(SYS_unlink, s);
 #else
 #else
 			__syscall(SYS_unlinkat, AT_FDCWD, s, 0);
 			__syscall(SYS_unlinkat, AT_FDCWD, s, 0);
 #endif
 #endif
+			f = __fdopen(fd, "w+");
+			if (!f) __syscall(SYS_close, fd);
 			return f;
 			return f;
 		}
 		}
 	}
 	}