From: Rich Felker Date: Fri, 6 Jun 2014 07:17:47 +0000 (-0400) Subject: fix fd leak in tmpfile when the fdopen operation fails X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=60158bff74e478a8031f618ea5e0546bf41a3523;p=musl 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. --- 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; } }