X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Ftracker.c;h=f3a9f258b808ffa8d4b56663915c2d95855583e8;hb=657d1bf105996bf8f6e13af697fb1112afa61b28;hp=0f69c775b75f6d1c08e213fa547bcbbf5feb7daa;hpb=74675e31d64f06986e335dffcb5e3ef5ce7c76c8;p=lttng-tools.git diff --git a/src/common/tracker.c b/src/common/tracker.c index 0f69c775b..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,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; } @@ -182,7 +183,6 @@ error: return ret; } -LTTNG_HIDDEN const char *lttng_process_attr_to_string(enum lttng_process_attr process_attr) { switch (process_attr) { @@ -210,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)); @@ -225,7 +224,6 @@ end: return values; } -LTTNG_HIDDEN unsigned int _lttng_process_attr_values_get_count( const struct lttng_process_attr_values *values) { @@ -233,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) @@ -292,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) @@ -323,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, @@ -343,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; @@ -368,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; } @@ -380,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); @@ -404,7 +405,6 @@ error: return -1; } -LTTNG_HIDDEN void lttng_process_attr_values_destroy(struct lttng_process_attr_values *values) { if (!values) { @@ -414,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) { @@ -452,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); @@ -483,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) { @@ -506,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) {