X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Ftracker.c;h=f3a9f258b808ffa8d4b56663915c2d95855583e8;hb=7fe0498a9173fca00dcd45a41847e629b70cd941;hp=e4aae431d19a4896c818267c4ab781c0b85bac08;hpb=1ad5cb59f0444bf6cbbb57351714fa7f445bf1ac;p=lttng-tools.git diff --git a/src/common/tracker.c b/src/common/tracker.c index e4aae431d..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, @@ -103,7 +102,8 @@ 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 && @@ -183,7 +183,6 @@ error: return ret; } -LTTNG_HIDDEN const char *lttng_process_attr_to_string(enum lttng_process_attr process_attr) { switch (process_attr) { @@ -211,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)); @@ -226,7 +224,6 @@ end: return values; } -LTTNG_HIDDEN unsigned int _lttng_process_attr_values_get_count( const struct lttng_process_attr_values *values) { @@ -234,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) @@ -293,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) @@ -324,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, @@ -344,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; @@ -369,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; } @@ -381,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); @@ -405,7 +405,6 @@ error: return -1; } -LTTNG_HIDDEN void lttng_process_attr_values_destroy(struct lttng_process_attr_values *values) { if (!values) { @@ -415,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) { @@ -453,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); @@ -484,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) { @@ -507,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) {