about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-04-18 21:22:14 -0400
committerRich Felker <dalias@aerifal.cx>2011-04-18 21:22:14 -0400
commit75a0be1f65f400489cc09b20a92a4569ad2b0782 (patch)
treea44c8e4d0e8250c4edd7d41e3dbccca9f944339d
parentdf9e11bb063446df760e8f7c62ea5eb6ba3faa34 (diff)
downloadmusl-75a0be1f65f400489cc09b20a92a4569ad2b0782.tar.gz
musl-75a0be1f65f400489cc09b20a92a4569ad2b0782.tar.xz
musl-75a0be1f65f400489cc09b20a92a4569ad2b0782.zip
avoid fd leak if opendir is cancelled when calloc has failed
-rw-r--r--src/dirent/opendir.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/dirent/opendir.c b/src/dirent/opendir.c
index cefe6ce7..928742c0 100644
--- a/src/dirent/opendir.c
+++ b/src/dirent/opendir.c
@@ -7,6 +7,7 @@
 #include <unistd.h>
 #include <limits.h>
 #include "__dirent.h"
+#include "syscall.h"
 
 DIR *opendir(const char *name)
 {
@@ -17,7 +18,7 @@ DIR *opendir(const char *name)
 		return 0;
 	fcntl(fd, F_SETFD, FD_CLOEXEC);
 	if (!(dir = calloc(1, sizeof *dir))) {
-		close(fd);
+		__syscall(SYS_close, fd);
 		return 0;
 	}
 	dir->fd = fd;