X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Factions%2Fsnapshot-session.c;h=8b23d58e70aafb81e09893e37c02dc8b6a3199c6;hb=246611b0dffa58fbc0e2329ddf6f9dc9d9eff7ce;hp=9e8e43577492b3f4d5bd0f3610fb529d7c37299a;hpb=757c48a28258e64fe251b6803ccdba7898590d70;p=lttng-tools.git diff --git a/src/common/actions/snapshot-session.c b/src/common/actions/snapshot-session.c index 9e8e43577..8b23d58e7 100644 --- a/src/common/actions/snapshot-session.c +++ b/src/common/actions/snapshot-session.c @@ -9,8 +9,8 @@ #include #include #include -#include -#include +#include +#include #include #include #include @@ -19,7 +19,7 @@ #include #define IS_SNAPSHOT_SESSION_ACTION(action) \ - (lttng_action_get_type_const(action) == LTTNG_ACTION_TYPE_SNAPSHOT_SESSION) + (lttng_action_get_type(action) == LTTNG_ACTION_TYPE_SNAPSHOT_SESSION) struct lttng_action_snapshot_session { struct lttng_action parent; @@ -124,16 +124,9 @@ end: return is_equal; } -static size_t serialize_strlen(const char *s) +static size_t serialize_strlen(const char *str) { - - size_t len = 0; - - if (s) { - len = strlen(s) + 1; - } - - return len; + return str ? strlen(str) + 1 : 0; } static int lttng_action_snapshot_session_serialize( @@ -148,7 +141,6 @@ static int lttng_action_snapshot_session_serialize( assert(payload); size_before_comm = payload->buffer.size; - size_before_comm = size_before_comm + sizeof(comm); action_snapshot_session = action_snapshot_session_from_action(action); comm.session_name_len = @@ -219,18 +211,26 @@ ssize_t lttng_action_snapshot_session_create_from_payload( struct lttng_action **p_action) { ssize_t consumed_len; - const struct lttng_action_snapshot_session_comm *comm; const char *variable_data; struct lttng_action *action; enum lttng_action_status status; struct lttng_snapshot_output *snapshot_output = NULL; + const struct lttng_action_snapshot_session_comm *comm; + const struct lttng_payload_view snapshot_session_comm_view = + lttng_payload_view_from_view( + view, 0, sizeof(*comm)); action = lttng_action_snapshot_session_create(); if (!action) { goto error; } - comm = (typeof(comm)) view->buffer.data; + if (!lttng_payload_view_is_valid(&snapshot_session_comm_view)) { + /* Payload not large enough to contain the header. */ + goto error; + } + + comm = (typeof(comm)) snapshot_session_comm_view.buffer.data; variable_data = (const char *) &comm->data; consumed_len = sizeof(struct lttng_action_snapshot_session_comm); @@ -257,8 +257,8 @@ ssize_t lttng_action_snapshot_session_create_from_payload( lttng_payload_view_from_view(view, consumed_len, comm->snapshot_output_len); - if (!snapshot_output_buffer_view.buffer.data) { - fprintf(stderr, "Failed to create buffer view for snapshot output.\n"); + if (!lttng_payload_view_is_valid(&snapshot_output_buffer_view)) { + ERR("Failed to create buffer view for snapshot output."); goto error; } @@ -267,8 +267,7 @@ ssize_t lttng_action_snapshot_session_create_from_payload( &snapshot_output_buffer_view, &snapshot_output); if (snapshot_output_consumed_len != comm->snapshot_output_len) { - fprintf(stderr, - "Failed to deserialize snapshot output object: " + ERR("Failed to deserialize snapshot output object: " "consumed-len: %zd, expected-len: %" PRIu32, snapshot_output_consumed_len, comm->snapshot_output_len);