In a multi-process/threaded environment, ev_util_read_file()
could leak fds to child processes when not using O_CLOEXEC/FD_CLOEXEC.
---
 evutil.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/evutil.c b/evutil.c
index 306f037..2bdacaa 100644
--- a/evutil.c
+++ b/evutil.c
@@ -125,10 +125,16 @@ evutil_read_file(const char *filename, char 
**content_out, size_t *len_out,
        if (is_binary)
                mode |= O_BINARY;
 #endif
+#ifdef O_CLOEXEC
+       mode |= O_CLOEXEC;
+#endif
 
        fd = open(filename, mode);
        if (fd < 0)
                return -1;
+#if !defined(O_CLOEXEC) && defined(FD_CLOEXEC)
+       fcntl(fd, F_SETFD, FD_CLOEXEC);
+#endif
        if (fstat(fd, &st) || st.st_size < 0 ||
            st.st_size > EV_SSIZE_MAX-1 ) {
                close(fd);
-- 
1.7.5.4

***********************************************************************
To unsubscribe, send an e-mail to majord...@freehaven.net with
unsubscribe libevent-users    in the body.

Reply via email to