diff options
author | Rich Felker <dalias@aerifal.cx> | 2011-04-18 21:22:14 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2011-04-18 21:22:14 -0400 |
commit | 75a0be1f65f400489cc09b20a92a4569ad2b0782 (patch) | |
tree | a44c8e4d0e8250c4edd7d41e3dbccca9f944339d | |
parent | df9e11bb063446df760e8f7c62ea5eb6ba3faa34 (diff) | |
download | musl-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.c | 3 |
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; |