From 60158bff74e478a8031f618ea5e0546bf41a3523 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Fri, 6 Jun 2014 03:17:47 -0400 Subject: 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. --- src/stdio/tmpfile.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/stdio/tmpfile.c b/src/stdio/tmpfile.c index a7d0000a..525090aa 100644 --- a/src/stdio/tmpfile.c +++ b/src/stdio/tmpfile.c @@ -16,12 +16,13 @@ FILE *tmpfile(void) __randname(s+13); fd = sys_open(s, O_RDWR|O_CREAT|O_EXCL, 0600); if (fd >= 0) { - f = __fdopen(fd, "w+"); #ifdef SYS_unlink __syscall(SYS_unlink, s); #else __syscall(SYS_unlinkat, AT_FDCWD, s, 0); #endif + f = __fdopen(fd, "w+"); + if (!f) __syscall(SYS_close, fd); return f; } } -- cgit 1.4.1