From 699f87380dea728a9548fe730ffe178c668925f3 Mon Sep 17 00:00:00 2001 From: Julien Desfossez Date: Mon, 13 Nov 2017 18:14:49 -0500 Subject: [PATCH] Fix: wrong parameter to fcntl in pipe_set_flag MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Depending on the flags passed, fcntl must be called with F_SETFD or F_SETFL. This fix checks the flag passed and ensure it is valid and calls fcntl with the right parameter. Signed-off-by: Julien Desfossez Signed-off-by: Jérémie Galarneau --- src/common/pipe.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/common/pipe.c b/src/common/pipe.c index 4220a4089..4fe45efad 100644 --- a/src/common/pipe.c +++ b/src/common/pipe.c @@ -154,9 +154,28 @@ static int _pipe_set_flags(struct lttng_pipe *pipe, int flags) } for (i = 0; i < 2; i++) { - ret = fcntl(pipe->fd[i], F_SETFD, flags); - if (ret < 0) { - PERROR("fcntl lttng pipe %d", flags); + if (flags & O_NONBLOCK) { + ret = fcntl(pipe->fd[i], F_SETFL, O_NONBLOCK); + if (ret < 0) { + PERROR("fcntl lttng pipe %d", flags); + goto end; + } + } + if (flags & FD_CLOEXEC) { + ret = fcntl(pipe->fd[i], F_SETFD, FD_CLOEXEC); + if (ret < 0) { + PERROR("fcntl lttng pipe %d", flags); + goto end; + } + } + /* + * We only check for O_NONBLOCK or FD_CLOEXEC, if another flag is + * needed, we can add it, but for now just make sure we don't make + * mistakes with the parameters we pass. + */ + if (!(flags & O_NONBLOCK) && !(flags & FD_CLOEXEC)) { + fprintf(stderr, "Unsupported flag\n"); + ret = -1; goto end; } } -- 2.34.1