X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flib%2Flttng-ctl%2Ffilter%2Ffilter-visitor-generate-bytecode.c;h=332a3875a6039e449970bb9ad0b266278b55cb11;hb=ab6a656907905eb3a0f95a43a1e14a93d40e4cd2;hp=71da21c8a5108a8f0114aa9389c16d92bc54240a;hpb=01a204f0f7a1e2070826804c142a456af21867a0;p=lttng-tools.git diff --git a/src/lib/lttng-ctl/filter/filter-visitor-generate-bytecode.c b/src/lib/lttng-ctl/filter/filter-visitor-generate-bytecode.c index 71da21c8a..332a3875a 100644 --- a/src/lib/lttng-ctl/filter/filter-visitor-generate-bytecode.c +++ b/src/lib/lttng-ctl/filter/filter-visitor-generate-bytecode.c @@ -95,14 +95,15 @@ int32_t bytecode_reserve(struct lttng_filter_bytecode_alloc **fb, uint32_t align int32_t ret; uint32_t padding = offset_align((*fb)->b.len, align); + if ((*fb)->b.len + padding + len > LTTNG_FILTER_MAX_LEN) + return -EINVAL; + if ((*fb)->b.len + padding + len > (*fb)->alloc_len) { uint32_t new_len = max_t(uint32_t, 1U << get_count_order((*fb)->b.len + padding + len), (*fb)->alloc_len << 1); uint32_t old_len = (*fb)->alloc_len; - if (new_len > 0xFFFF) - return -EINVAL; *fb = realloc(*fb, sizeof(struct lttng_filter_bytecode_alloc) + new_len); if (!*fb) return -ENOMEM; @@ -238,7 +239,7 @@ int visit_node_load(struct filter_parser_ctx *ctx, struct ir_op *node) uint32_t insn_len = sizeof(struct load_op) + sizeof(struct field_ref); struct field_ref ref_offset; - uint16_t reloc_offset; + uint32_t reloc_offset; insn = calloc(insn_len, 1); if (!insn)