From: Julien Desfossez Date: Mon, 13 Nov 2017 23:14:49 +0000 (-0500) Subject: Fix: wrong parameter to fcntl in pipe_set_flag X-Git-Tag: v2.11.0-rc1~428 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=699f87380dea728a9548fe730ffe178c668925f3;p=lttng-tools.git Fix: wrong parameter to fcntl in pipe_set_flag 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 --- 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; } }