X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Factions%2Fsnapshot-session.c;h=8b23d58e70aafb81e09893e37c02dc8b6a3199c6;hb=bbd6675c857ad9bf95e59446476cab19d1f6736e;hp=058179633db411d6e29c42fc52c59af24b13fc94;hpb=0c51e8f329cdd907761e34c3e4394200a56c6812;p=lttng-tools.git diff --git a/src/common/actions/snapshot-session.c b/src/common/actions/snapshot-session.c index 058179633..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; @@ -141,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 = @@ -212,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); @@ -250,7 +257,7 @@ 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) { + if (!lttng_payload_view_is_valid(&snapshot_output_buffer_view)) { ERR("Failed to create buffer view for snapshot output."); goto error; }