From: Mathieu Desnoyers Date: Tue, 8 Mar 2016 16:34:01 +0000 (-0500) Subject: Fix: filter interpreter with userspace strings X-Git-Tag: v2.7.2~1 X-Git-Url: http://git.liburcu.org/?a=commitdiff_plain;ds=sidebyside;h=e2b3f656f1a73942d345fd1a509d00bb00cf9029;p=lttng-modules.git Fix: filter interpreter with userspace strings The filter interpreter is populating the "str" register field, but the string comparison functions expect to use the "user_str" register field whenever it deals with a userspace string ("user" flag set to 1). Since we are using __copy_from_user_inatomic(), this is typically bailing out on anything that requires to read the string (except the '*' wildcard). Fixes #943 Signed-off-by: Mathieu Desnoyers --- diff --git a/lttng-filter-interpreter.c b/lttng-filter-interpreter.c index ffce2150..7c80c35c 100644 --- a/lttng-filter-interpreter.c +++ b/lttng-filter-interpreter.c @@ -816,7 +816,7 @@ uint64_t lttng_filter_interpret_bytecode(void *filter_data, dbg_printk("load field ref offset %u type user string\n", ref->offset); estack_push(stack, top, ax, bx); - estack_ax(stack, top)->u.s.str = + estack_ax(stack, top)->u.s.user_str = *(const char * const *) &filter_stack_data[ref->offset]; if (unlikely(!estack_ax(stack, top)->u.s.str)) { dbg_printk("Filter warning: loading a NULL string.\n"); @@ -841,7 +841,7 @@ uint64_t lttng_filter_interpret_bytecode(void *filter_data, estack_push(stack, top, ax, bx); estack_ax(stack, top)->u.s.seq_len = *(unsigned long *) &filter_stack_data[ref->offset]; - estack_ax(stack, top)->u.s.str = + estack_ax(stack, top)->u.s.user_str = *(const char **) (&filter_stack_data[ref->offset + sizeof(unsigned long)]); if (unlikely(!estack_ax(stack, top)->u.s.str)) {