From a1703220834ddeffde5d571cd776ca981e8a42f6 Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Fri, 15 Mar 2013 09:45:12 -0700 Subject: liblog: fix fd leakage File descriptors remain open across an exec unless FD_CLOEXEC is set. Add O_CLOEXEC to the open() call to prevent file descriptor leakage. In particular, the following program will eventually run out of file descriptors: int main(int argc, char **argv) { printf("===== entering main =====\n"); ALOGW("entering main"); system("ls -l /proc/self/fd/"); execv(argv[0], argv); printf("exec failed\n"); return -1; } Change-Id: I5be43ab3b9f82a05f242b1f586454c50568af388 --- liblog/logd_write.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'liblog/logd_write.c') diff --git a/liblog/logd_write.c b/liblog/logd_write.c index d812abc..3613d25 100644 --- a/liblog/logd_write.c +++ b/liblog/logd_write.c @@ -24,6 +24,8 @@ #include #include #include +#include +#include #include #include @@ -37,7 +39,7 @@ #define log_writev(filedes, vector, count) fakeLogWritev(filedes, vector, count) #define log_close(filedes) fakeLogClose(filedes) #else -#define log_open(pathname, flags) open(pathname, flags) +#define log_open(pathname, flags) open(pathname, (flags) | O_CLOEXEC) #define log_writev(filedes, vector, count) writev(filedes, vector, count) #define log_close(filedes) close(filedes) #endif -- cgit v1.1