[lttng-dev] [PATCH lttng-tools] Fix: wrong parameter to fcntl in pipe_set_flag
Julien Desfossez
jdesfossez at efficios.com
Tue Nov 7 23:10:10 UTC 2017
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.
Also, for CLOEXEC, we need to pass FD_CLOEXEC, not O_CLOEXEC.
Signed-off-by: Julien Desfossez <jdesfossez at efficios.com>
---
src/bin/lttng-sessiond/notification-thread.c | 2 +-
src/common/pipe.c | 25 ++++++++++++++++++++++---
2 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/src/bin/lttng-sessiond/notification-thread.c b/src/bin/lttng-sessiond/notification-thread.c
index c47b365..3ef7df1 100644
--- a/src/bin/lttng-sessiond/notification-thread.c
+++ b/src/bin/lttng-sessiond/notification-thread.c
@@ -96,7 +96,7 @@ struct notification_thread_handle *notification_thread_handle_create(
goto end;
}
- event_pipe = lttng_pipe_open(O_CLOEXEC);
+ event_pipe = lttng_pipe_open(FD_CLOEXEC);
if (!event_pipe) {
ERR("event_pipe creation");
goto error;
diff --git a/src/common/pipe.c b/src/common/pipe.c
index 4220a40..4fe45ef 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.7.4
More information about the lttng-dev
mailing list