X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flttng-filter-interpreter.c;h=337cd71f888a4f7e7c66bc96a88af25755c88452;hb=0bcedee9330c118a554bd2446303712a2702e491;hp=5ba7e230094458fd864bc7500ce60bf6988dc391;hpb=cfa6cc1d0f01c2cfcc1a679abf3a6572d411c309;p=lttng-modules.git diff --git a/src/lttng-filter-interpreter.c b/src/lttng-filter-interpreter.c index 5ba7e230..337cd71f 100644 --- a/src/lttng-filter-interpreter.c +++ b/src/lttng-filter-interpreter.c @@ -81,16 +81,14 @@ static int stack_star_glob_match(struct estack *stack, int top, const char *cmp_type) { bool has_user = false; - mm_segment_t old_fs; int result; struct estack_entry *pattern_reg; struct estack_entry *candidate_reg; + /* Disable the page fault handler when reading from userspace. */ if (estack_bx(stack, top)->u.s.user || estack_ax(stack, top)->u.s.user) { has_user = true; - old_fs = get_fs(); - set_fs(KERNEL_DS); pagefault_disable(); } @@ -106,10 +104,8 @@ int stack_star_glob_match(struct estack *stack, int top, const char *cmp_type) /* Perform the match operation. */ result = !strutils_star_glob_match_char_cb(get_char_at_cb, pattern_reg, get_char_at_cb, candidate_reg); - if (has_user) { + if (has_user) pagefault_enable(); - set_fs(old_fs); - } return result; } @@ -119,13 +115,10 @@ int stack_strcmp(struct estack *stack, int top, const char *cmp_type) { size_t offset_bx = 0, offset_ax = 0; int diff, has_user = 0; - mm_segment_t old_fs; if (estack_bx(stack, top)->u.s.user || estack_ax(stack, top)->u.s.user) { has_user = 1; - old_fs = get_fs(); - set_fs(KERNEL_DS); pagefault_disable(); } @@ -210,10 +203,9 @@ int stack_strcmp(struct estack *stack, int top, const char *cmp_type) offset_bx++; offset_ax++; } - if (has_user) { + if (has_user) pagefault_enable(); - set_fs(old_fs); - } + return diff; } @@ -221,7 +213,7 @@ uint64_t lttng_filter_false(void *filter_data, struct lttng_probe_ctx *lttng_probe_ctx, const char *filter_stack_data) { - return 0; + return LTTNG_FILTER_DISCARD; } #ifdef INTERPRETER_USE_SWITCH @@ -234,7 +226,7 @@ uint64_t lttng_filter_false(void *filter_data, start_pc = &bytecode->data[0]; \ for (pc = next_pc = start_pc; pc - start_pc < bytecode->len; \ pc = next_pc) { \ - dbg_printk("Executing op %s (%u)\n", \ + dbg_printk("LTTng: Executing op %s (%u)\n", \ lttng_filter_print_op((unsigned int) *(filter_opcode_t *) pc), \ (unsigned int) *(filter_opcode_t *) pc); \ switch (*(filter_opcode_t *) pc) { @@ -317,11 +309,11 @@ static int context_get_index(struct lttng_probe_ctx *lttng_probe_ctx, } case atype_array_nestable: if (!lttng_is_bytewise_integer(field->type.u.array_nestable.elem_type)) { - printk(KERN_WARNING "Array nesting only supports integer types.\n"); + printk(KERN_WARNING "LTTng: filter: Array nesting only supports integer types.\n"); return -EINVAL; } if (field->type.u.array_nestable.elem_type->u.integer.encoding == lttng_encode_none) { - printk(KERN_WARNING "Only string arrays are supported for contexts.\n"); + printk(KERN_WARNING "LTTng: filter: Only string arrays are supported for contexts.\n"); return -EINVAL; } ptr->object_type = OBJECT_TYPE_STRING; @@ -330,11 +322,11 @@ static int context_get_index(struct lttng_probe_ctx *lttng_probe_ctx, break; case atype_sequence_nestable: if (!lttng_is_bytewise_integer(field->type.u.sequence_nestable.elem_type)) { - printk(KERN_WARNING "Sequence nesting only supports integer types.\n"); + printk(KERN_WARNING "LTTng: filter: Sequence nesting only supports integer types.\n"); return -EINVAL; } if (field->type.u.sequence_nestable.elem_type->u.integer.encoding == lttng_encode_none) { - printk(KERN_WARNING "Only string sequences are supported for contexts.\n"); + printk(KERN_WARNING "LTTng: filter: Only string sequences are supported for contexts.\n"); return -EINVAL; } ptr->object_type = OBJECT_TYPE_STRING; @@ -347,13 +339,13 @@ static int context_get_index(struct lttng_probe_ctx *lttng_probe_ctx, ptr->ptr = v.str; break; case atype_struct_nestable: - printk(KERN_WARNING "Structure type cannot be loaded.\n"); + printk(KERN_WARNING "LTTng: filter: Structure type cannot be loaded.\n"); return -EINVAL; case atype_variant_nestable: - printk(KERN_WARNING "Variant type cannot be loaded.\n"); + printk(KERN_WARNING "LTTng: filter: Variant type cannot be loaded.\n"); return -EINVAL; default: - printk(KERN_WARNING "Unknown type: %d", (int) field->type.atype); + printk(KERN_WARNING "LTTng: filter: Unknown type: %d", (int) field->type.atype); return -EINVAL; } return 0; @@ -412,12 +404,12 @@ static int dynamic_get_index(struct lttng_probe_ctx *lttng_probe_ctx, break; } case OBJECT_TYPE_STRUCT: - printk(KERN_WARNING "Nested structures are not supported yet.\n"); + printk(KERN_WARNING "LTTng: filter: Nested structures are not supported yet.\n"); ret = -EINVAL; goto end; case OBJECT_TYPE_VARIANT: default: - printk(KERN_WARNING "Unexpected get index type %d", + printk(KERN_WARNING "LTTng: filter: Unexpected get index type %d", (int) stack_top->u.ptr.object_type); ret = -EINVAL; goto end; @@ -511,7 +503,7 @@ static int dynamic_load_field(struct estack_entry *stack_top) { uint16_t tmp; - dbg_printk("op load field s16\n"); + dbg_printk("op load field u16\n"); tmp = *(uint16_t *) stack_top->u.ptr.ptr; if (stack_top->u.ptr.rev_bo) __swab16s(&tmp); @@ -588,7 +580,7 @@ static int dynamic_load_field(struct estack_entry *stack_top) case OBJECT_TYPE_ARRAY: case OBJECT_TYPE_STRUCT: case OBJECT_TYPE_VARIANT: - printk(KERN_WARNING "Sequences, arrays, struct and variant cannot be loaded (nested types).\n"); + printk(KERN_WARNING "LTTng: filter: Sequences, arrays, struct and variant cannot be loaded (nested types).\n"); ret = -EINVAL; goto end; } @@ -764,14 +756,14 @@ uint64_t lttng_filter_interpret_bytecode(void *filter_data, #ifdef INTERPRETER_USE_SWITCH default: #endif /* INTERPRETER_USE_SWITCH */ - printk(KERN_WARNING "unknown bytecode op %u\n", + printk(KERN_WARNING "LTTng: filter: unknown bytecode op %u\n", (unsigned int) *(filter_opcode_t *) pc); ret = -EINVAL; goto end; OP(FILTER_OP_RETURN): OP(FILTER_OP_RETURN_S64): - /* LTTNG_FILTER_DISCARD or LTTNG_FILTER_RECORD_FLAG */ + /* LTTNG_FILTER_DISCARD or LTTNG_FILTER_RECORD_FLAG */ retval = !!estack_ax_v; ret = 0; goto end; @@ -782,7 +774,7 @@ uint64_t lttng_filter_interpret_bytecode(void *filter_data, OP(FILTER_OP_MOD): OP(FILTER_OP_PLUS): OP(FILTER_OP_MINUS): - printk(KERN_WARNING "unsupported bytecode op %u\n", + printk(KERN_WARNING "LTTng: filter: unsupported bytecode op %u\n", (unsigned int) *(filter_opcode_t *) pc); ret = -EINVAL; goto end; @@ -793,7 +785,7 @@ uint64_t lttng_filter_interpret_bytecode(void *filter_data, OP(FILTER_OP_LT): OP(FILTER_OP_GE): OP(FILTER_OP_LE): - printk(KERN_WARNING "unsupported non-specialized bytecode op %u\n", + printk(KERN_WARNING "LTTng: filter: unsupported non-specialized bytecode op %u\n", (unsigned int) *(filter_opcode_t *) pc); ret = -EINVAL; goto end; @@ -1034,7 +1026,7 @@ uint64_t lttng_filter_interpret_bytecode(void *filter_data, OP(FILTER_OP_UNARY_PLUS): OP(FILTER_OP_UNARY_MINUS): OP(FILTER_OP_UNARY_NOT): - printk(KERN_WARNING "unsupported non-specialized bytecode op %u\n", + printk(KERN_WARNING "LTTng: filter: unsupported non-specialized bytecode op %u\n", (unsigned int) *(filter_opcode_t *) pc); ret = -EINVAL; goto end; @@ -1237,7 +1229,7 @@ uint64_t lttng_filter_interpret_bytecode(void *filter_data, /* cast */ OP(FILTER_OP_CAST_TO_S64): - printk(KERN_WARNING "unsupported non-specialized bytecode op %u\n", + printk(KERN_WARNING "LTTng: filter: unsupported non-specialized bytecode op %u\n", (unsigned int) *(filter_opcode_t *) pc); ret = -EINVAL; goto end; @@ -1391,7 +1383,7 @@ uint64_t lttng_filter_interpret_bytecode(void *filter_data, dbg_printk("op get symbol\n"); switch (estack_ax(stack, top)->u.ptr.type) { case LOAD_OBJECT: - printk(KERN_WARNING "Nested fields not implemented yet.\n"); + printk(KERN_WARNING "LTTng: filter: Nested fields not implemented yet.\n"); ret = -EINVAL; goto end; case LOAD_ROOT_CONTEXT: @@ -1567,9 +1559,9 @@ uint64_t lttng_filter_interpret_bytecode(void *filter_data, END_OP end: - /* return 0 (discard) on error */ + /* Return _DISCARD on error. */ if (ret) - return 0; + return LTTNG_FILTER_DISCARD; return retval; }