X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=liblttng-ustconsumer%2Flttng-ustconsumer.c;h=10213c1c97dcb8b4d93a80895a0e56d7ed9297db;hb=734f79bf717d87817623d382c59086dc9e8ef610;hp=efb6be42490812d45f911b7f650254264efdc57f;hpb=6df2e2c977b698cc6b8f15c90b649516674028f9;p=lttng-tools.git diff --git a/liblttng-ustconsumer/lttng-ustconsumer.c b/liblttng-ustconsumer/lttng-ustconsumer.c index efb6be424..10213c1c9 100644 --- a/liblttng-ustconsumer/lttng-ustconsumer.c +++ b/liblttng-ustconsumer/lttng-ustconsumer.c @@ -34,6 +34,8 @@ #include #include +#include "common/runas.h" + extern struct lttng_consumer_global_data consumer_data; extern int consumer_poll_timeout; extern volatile int consumer_quit; @@ -277,11 +279,8 @@ int lttng_ustconsumer_allocate_channel(struct lttng_consumer_channel *chan) if (!chan->handle) { return -ENOMEM; } - /* - * The channel fds are passed to ustctl, we only keep a copy. - */ - chan->shm_fd_is_copy = 1; chan->wait_fd_is_copy = 1; + chan->shm_fd = -1; return 0; } @@ -312,15 +311,14 @@ int lttng_ustconsumer_allocate_stream(struct lttng_consumer_stream *stream) stream->buf = ustctl_open_stream_read(stream->chan->handle, stream->cpu); if (!stream->buf) return -EBUSY; + /* ustctl_open_stream_read has closed the shm fd. */ + stream->wait_fd_is_copy = 1; + stream->shm_fd = -1; + stream->mmap_base = ustctl_get_mmap_base(stream->chan->handle, stream->buf); if (!stream->mmap_base) { return -EINVAL; } - /* - * The stream fds are passed to ustctl, we only keep a copy. - */ - stream->shm_fd_is_copy = 1; - stream->wait_fd_is_copy = 1; return 0; } @@ -397,19 +395,16 @@ int lttng_ustconsumer_on_recv_stream(struct lttng_consumer_stream *stream) /* Opening the tracefile in write mode */ if (stream->path_name != NULL) { - ret = open(stream->path_name, - O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU|S_IRWXG|S_IRWXO); + ret = run_as_open(stream->path_name, + O_WRONLY|O_CREAT|O_TRUNC, + S_IRWXU|S_IRWXG|S_IRWXO, + stream->uid, stream->gid); if (ret < 0) { ERR("Opening %s", stream->path_name); perror("open"); goto error; } stream->out_fd = ret; - ret = chown(stream->path_name, stream->uid, stream->gid); - if (ret < 0) { - ERR("Changing ownership of %s", stream->path_name); - perror("chown"); - } } /* we return 0 to let the library handle the FD internally */