X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Ftracker.c;h=f3a9f258b808ffa8d4b56663915c2d95855583e8;hb=3afa94aeca5a0daae40fd7b6cc96b7e4c150c7d8;hp=c27d9765562e590241e2ae9ba5ece15e8bbdc1a0;hpb=d4e3717311122d9def6e4edbebae32ab6fd06507;p=lttng-tools.git diff --git a/src/common/tracker.c b/src/common/tracker.c index c27d97655..f3a9f258b 100644 --- a/src/common/tracker.c +++ b/src/common/tracker.c @@ -59,7 +59,6 @@ static inline bool is_value_type_name( value_type == LTTNG_PROCESS_ATTR_VALUE_TYPE_GROUP_NAME; } -LTTNG_HIDDEN enum lttng_error_code process_attr_value_from_comm( enum lttng_domain_type domain, enum lttng_process_attr process_attr, @@ -85,6 +84,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 +102,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; } @@ -181,7 +183,6 @@ error: return ret; } -LTTNG_HIDDEN const char *lttng_process_attr_to_string(enum lttng_process_attr process_attr) { switch (process_attr) { @@ -209,7 +210,6 @@ static void process_attr_tracker_value_destructor(void *ptr) process_attr_value_destroy(value); } -LTTNG_HIDDEN struct lttng_process_attr_values *lttng_process_attr_values_create(void) { struct lttng_process_attr_values *values = zmalloc(sizeof(*values)); @@ -224,7 +224,6 @@ end: return values; } -LTTNG_HIDDEN unsigned int _lttng_process_attr_values_get_count( const struct lttng_process_attr_values *values) { @@ -232,7 +231,6 @@ unsigned int _lttng_process_attr_values_get_count( &values->array); } -LTTNG_HIDDEN const struct process_attr_value *lttng_process_attr_tracker_values_get_at_index( const struct lttng_process_attr_values *values, unsigned int index) @@ -291,7 +289,6 @@ end: return ret; } -LTTNG_HIDDEN int lttng_process_attr_values_serialize( const struct lttng_process_attr_values *values, struct lttng_dynamic_buffer *buffer) @@ -322,7 +319,6 @@ end: return ret; } -LTTNG_HIDDEN ssize_t lttng_process_attr_values_create_from_buffer( enum lttng_domain_type domain, enum lttng_process_attr process_attr, @@ -342,9 +338,10 @@ ssize_t lttng_process_attr_values_create_from_buffer( header_view = lttng_buffer_view_from_view( buffer_view, 0, sizeof(*header)); - if (!header_view.data) { + if (!lttng_buffer_view_is_valid(&header_view)) { goto error; } + offset = header_view.size; header = (typeof(header)) header_view.data; @@ -367,7 +364,7 @@ ssize_t lttng_process_attr_values_create_from_buffer( value_view = lttng_buffer_view_from_view( buffer_view, offset, sizeof(*value_comm)); - if (!value_view.data) { + if (!lttng_buffer_view_is_valid(&value_view)) { goto error; } @@ -379,8 +376,13 @@ ssize_t lttng_process_attr_values_create_from_buffer( value_name_view = lttng_buffer_view_from_view( buffer_view, offset, value_comm->value.name_len); + if (!lttng_buffer_view_is_valid(&value_name_view)) { + goto error; + } + offset += value_name_view.size; } + ret_code = process_attr_value_from_comm(domain, process_attr, type, &value_comm->value.integral, &value_name_view, &value); @@ -403,7 +405,6 @@ error: return -1; } -LTTNG_HIDDEN void lttng_process_attr_values_destroy(struct lttng_process_attr_values *values) { if (!values) { @@ -413,7 +414,6 @@ void lttng_process_attr_values_destroy(struct lttng_process_attr_values *values) free(values); } -LTTNG_HIDDEN struct process_attr_value *process_attr_value_copy( const struct process_attr_value *value) { @@ -451,7 +451,6 @@ error: return NULL; } -LTTNG_HIDDEN unsigned long process_attr_value_hash(const struct process_attr_value *a) { unsigned long hash = hash_key_ulong((void *) a->type, lttng_ht_seed); @@ -482,7 +481,6 @@ unsigned long process_attr_value_hash(const struct process_attr_value *a) return hash; } -LTTNG_HIDDEN bool process_attr_tracker_value_equal(const struct process_attr_value *a, const struct process_attr_value *b) { @@ -505,7 +503,6 @@ bool process_attr_tracker_value_equal(const struct process_attr_value *a, } } -LTTNG_HIDDEN void process_attr_value_destroy(struct process_attr_value *value) { if (!value) {