trace-cmd's record mode allows child processes to inherit
tracing-related file descriptors:
$ trace-cmd record -esched: ls -l /proc/self/fd
total 0
lrwx------. 1 root root 64 May 20 12:44 0 -> /dev/pts/11
lrwx------. 1 root root 64 May 20 12:44 1 -> /dev/pts/11
lrwx------. 1 root root 64 May 20 12:44 2 -> /dev/pts/11
lrwx------. 1 root root 64 May 20 12:44 3 -> /sys/kernel/debug/tracing/tracing_on
l-wx------. 1 root root 64 May 20 12:44 4 -> /sys/kernel/debug/tracing/set_ftrace_pid
l-wx------. 1 root root 64 May 20 12:44 5 -> /sys/kernel/debug/tracing/tracing_enabled
lr-x------. 1 root root 64 May 20 12:44 6 -> /proc/31036/fd
This can be problematic for applications (such as lxc) that
interrogate their open file descriptors.
Open these with O_CLOEXEC so they are not inherited.
Signed-off-by: Nathan Lynch <[email protected]>
---
trace-record.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/trace-record.c b/trace-record.c
index fa23b82..c4a51d7 100644
--- a/trace-record.c
+++ b/trace-record.c
@@ -343,7 +343,7 @@ static void update_ftrace_pid(const char *pid, int reset)
path = tracecmd_get_tracing_file("set_ftrace_pid");
if (!path)
return;
- fd = open(path, O_WRONLY | (reset ? O_TRUNC : 0));
+ fd = open(path, O_WRONLY | O_CLOEXEC | (reset ? O_TRUNC : 0));
if (fd < 0)
return;
}
@@ -795,7 +795,7 @@ static void check_tracing_enabled(void)
if (fd < 0) {
path = tracecmd_get_tracing_file("tracing_enabled");
- fd = open(path, O_WRONLY);
+ fd = open(path, O_WRONLY | O_CLOEXEC);
tracecmd_put_tracing_file(path);
if (fd < 0)
@@ -815,7 +815,7 @@ static int open_tracing_on(void)
return fd;
path = tracecmd_get_tracing_file("tracing_on");
- fd = open(path, O_RDWR);
+ fd = open(path, O_RDWR | O_CLOEXEC);
if (fd < 0)
die("opening '%s'", path);
tracecmd_put_tracing_file(path);
--
1.7.5.1