Fix: wrong parameter to fcntl in pipe_set_flag
authorJulien Desfossez <jdesfossez@efficios.com>
Mon, 13 Nov 2017 23:14:49 +0000 (18:14 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 15 Nov 2017 23:37:01 +0000 (18:37 -0500)
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 <jdesfossez@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/common/pipe.c

index 4220a4089590d28121af9e3c2bb395c590b5c97a..4fe45efada3e7dabfefd57b72b71cbcf167f2b03 100644 (file)
@@ -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;
                }
        }
This page took 0.026038 seconds and 4 git commands to generate.