X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=src%2Fcommon%2Ftracker.c;h=734fbd3093e273702860fd488e9a548d8c8b9dfe;hb=b7238f7cfdcc67f4c254c03004989156c13c4c15;hp=532a924b56a772b3d55d11e611028ebf7267a7fe;hpb=f953b297c44e58bf84afbe04abd758e63149f40b;p=lttng-tools.git diff --git a/src/common/tracker.c b/src/common/tracker.c index 532a924b5..734fbd309 100644 --- a/src/common/tracker.c +++ b/src/common/tracker.c @@ -20,7 +20,7 @@ struct process_attr_tracker_values_comm_header { uint32_t count; -}; +} LTTNG_PACKED; struct process_attr_tracker_value_comm { /* enum lttng_process_attr_value_type */ @@ -30,7 +30,7 @@ struct process_attr_tracker_value_comm { /* Includes the '\0' terminator. */ uint32_t name_len; } value; -}; +} LTTNG_PACKED; #define GET_INTEGRAL_COMM_VALUE(value_ptr, as_type) \ ((as_type)(is_signed(as_type) ? (value_ptr)->u._signed : \ @@ -85,6 +85,7 @@ enum lttng_error_code process_attr_value_from_comm( name = strdup(value_view->data); if (!name) { ret = LTTNG_ERR_NOMEM; + goto error; } } @@ -102,10 +103,12 @@ enum lttng_error_code process_attr_value_from_comm( } /* Only expect a payload for name value types. */ - if (is_value_type_name(value_type) && value_view->size == 0) { + if (is_value_type_name(value_type) && + (!value_view || value_view->size == 0)) { ret = LTTNG_ERR_INVALID_PROTOCOL; goto error; - } else if (!is_value_type_name(value_type) && value_view->size != 0) { + } else if (!is_value_type_name(value_type) && value_view && + value_view->size != 0) { ret = LTTNG_ERR_INVALID_PROTOCOL; goto error; } @@ -173,6 +176,7 @@ enum lttng_error_code process_attr_value_from_comm( *_value = value; value = NULL; + free(name); return LTTNG_OK; error: free(name);