projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: snapshot with multiple UIDs
[lttng-tools.git]
/
src
/
common
/
ust-consumer
/
ust-consumer.c
diff --git
a/src/common/ust-consumer/ust-consumer.c
b/src/common/ust-consumer/ust-consumer.c
index 336466a470bd453da46248ecb4e699341e942f94..9b1675e8be94b89b560dcd77db1e36e5fedb8775 100644
(file)
--- a/
src/common/ust-consumer/ust-consumer.c
+++ b/
src/common/ust-consumer/ust-consumer.c
@@
-767,7
+767,8
@@
static int snapshot_metadata(uint64_t key, char *path, uint64_t relayd_id,
metadata_channel = consumer_find_channel(key);
if (!metadata_channel) {
metadata_channel = consumer_find_channel(key);
if (!metadata_channel) {
- ERR("UST snapshot metadata channel not found for key %lu", key);
+ ERR("UST snapshot metadata channel not found for key %" PRIu64,
+ key);
ret = -1;
goto error;
}
ret = -1;
goto error;
}
@@
-863,12
+864,12
@@
static int snapshot_channel(uint64_t key, char *path, uint64_t relayd_id,
channel = consumer_find_channel(key);
if (!channel) {
channel = consumer_find_channel(key);
if (!channel) {
- ERR("UST snapshot channel not found for key %
lu"
, key);
+ ERR("UST snapshot channel not found for key %
" PRIu64
, key);
ret = -1;
goto error;
}
assert(!channel->monitor);
ret = -1;
goto error;
}
assert(!channel->monitor);
- DBG("UST consumer snapshot channel %
lu"
, key);
+ DBG("UST consumer snapshot channel %
" PRIu64
, key);
cds_list_for_each_entry(stream, &channel->streams.head, send_node) {
/* Lock stream because we are about to change its state. */
cds_list_for_each_entry(stream, &channel->streams.head, send_node) {
/* Lock stream because we are about to change its state. */
@@
-957,12
+958,12
@@
static int snapshot_channel(uint64_t key, char *path, uint64_t relayd_id,
padded_len - len);
if (use_relayd) {
if (read_len != len) {
padded_len - len);
if (use_relayd) {
if (read_len != len) {
- ret = -
1
;
+ ret = -
EPERM
;
goto error_put_subbuf;
}
} else {
if (read_len != padded_len) {
goto error_put_subbuf;
}
} else {
if (read_len != padded_len) {
- ret = -
1
;
+ ret = -
EPERM
;
goto error_put_subbuf;
}
}
goto error_put_subbuf;
}
}
@@
-1177,6
+1178,13
@@
int lttng_ustconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
goto end_channel_error;
}
goto end_channel_error;
}
+ /*
+ * Assign UST application UID to the channel. This value is ignored for
+ * per PID buffers. This is specific to UST thus setting this after the
+ * allocation.
+ */
+ channel->ust_app_uid = msg.u.ask_channel.ust_app_uid;
+
/* Build channel attributes from received message. */
attr.subbuf_size = msg.u.ask_channel.subbuf_size;
attr.num_subbuf = msg.u.ask_channel.num_subbuf;
/* Build channel attributes from received message. */
attr.subbuf_size = msg.u.ask_channel.subbuf_size;
attr.num_subbuf = msg.u.ask_channel.num_subbuf;
@@
-1858,12
+1866,18
@@
int lttng_ustconsumer_request_metadata(struct lttng_consumer_local_data *ctx,
request.session_id = channel->session_id;
request.session_id_per_pid = channel->session_id_per_pid;
request.session_id = channel->session_id;
request.session_id_per_pid = channel->session_id_per_pid;
- request.uid = channel->uid;
+ /*
+ * Request the application UID here so the metadata of that application can
+ * be sent back. The channel UID corresponds to the user UID of the session
+ * used for the rights on the stream file(s).
+ */
+ request.uid = channel->ust_app_uid;
request.key = channel->key;
request.key = channel->key;
+
DBG("Sending metadata request to sessiond, session id %" PRIu64
DBG("Sending metadata request to sessiond, session id %" PRIu64
- ", per-pid %" PRIu64,
-
channel->session_
id,
-
channel->session_id_per_pid
);
+ ", per-pid %" PRIu64
", app UID %u and channek key %" PRIu64
,
+
request.session_id, request.session_id_per_pid, request.u
id,
+
request.key
);
pthread_mutex_lock(&ctx->metadata_socket_lock);
ret = lttcomm_send_unix_sock(ctx->consumer_metadata_socket, &request,
pthread_mutex_lock(&ctx->metadata_socket_lock);
ret = lttcomm_send_unix_sock(ctx->consumer_metadata_socket, &request,
This page took
0.031972 seconds
and
5
git commands to generate.