Fix: filter validator: refuse string and star glob input to bitwise operation
[lttng-modules.git] / include / lttng / filter.h
index eb70fe365fcd0758e0e26ec4fad37106f48d22a1..ce26921386ce38eae0a46b0aa0130d382cdab4e1 100644 (file)
 
 #ifdef DEBUG
 #define dbg_printk(fmt, args...)                               \
-       printk(KERN_DEBUG "[debug bytecode in %s:%s@%u] " fmt,          \
+       printk(KERN_DEBUG "LTTng: [debug bytecode in %s:%s@%u] " fmt,           \
                __FILE__, __func__, __LINE__, ## args)
 #else
 #define dbg_printk(fmt, args...)                               \
 do {                                                           \
        /* do nothing but check printf format */                \
        if (0)                                                  \
-               printk(KERN_DEBUG "[debug bytecode in %s:%s@%u] " fmt,  \
+               printk(KERN_DEBUG "LTTng: [debug bytecode in %s:%s@%u] " fmt,   \
                        __FILE__, __func__, __LINE__, ## args); \
 } while (0)
 #endif
@@ -138,7 +138,7 @@ static inline
 int vstack_push(struct vstack *stack)
 {
        if (stack->top >= FILTER_STACK_LEN - 1) {
-               printk(KERN_WARNING "Stack full\n");
+               printk(KERN_WARNING "LTTng: filter: Stack full\n");
                return -EINVAL;
        }
        ++stack->top;
@@ -149,7 +149,7 @@ static inline
 int vstack_pop(struct vstack *stack)
 {
        if (unlikely(stack->top < 0)) {
-               printk(KERN_WARNING "Stack empty\n");
+               printk(KERN_WARNING "LTTng: filter: Stack empty\n");
                return -EINVAL;
        }
        stack->top--;
@@ -182,6 +182,7 @@ struct load_ptr {
 };
 
 struct estack_entry {
+       enum entry_type type;
        union {
                int64_t v;
 
@@ -204,6 +205,9 @@ struct estack {
 #define estack_ax_v    ax
 #define estack_bx_v    bx
 
+#define estack_ax_t    ax_t
+#define estack_bx_t    bx_t
+
 #define estack_ax(stack, top)                                  \
        ({                                                      \
                BUG_ON((top) <= FILTER_STACK_EMPTY);            \
@@ -216,26 +220,30 @@ struct estack {
                &(stack)->e[(top) - 1];                         \
        })
 
-#define estack_push(stack, top, ax, bx)                                \
+#define estack_push(stack, top, ax, bx, ax_t, bx_t)            \
        do {                                                    \
                BUG_ON((top) >= FILTER_STACK_LEN - 1);          \
                (stack)->e[(top) - 1].u.v = (bx);               \
+               (stack)->e[(top) - 1].type = (bx_t);            \
                (bx) = (ax);                                    \
+               (bx_t) = (ax_t);                                \
                ++(top);                                        \
        } while (0)
 
-#define estack_pop(stack, top, ax, bx)                         \
+#define estack_pop(stack, top, ax, bx, ax_t, bx_t)             \
        do {                                                    \
                BUG_ON((top) <= FILTER_STACK_EMPTY);            \
                (ax) = (bx);                                    \
+               (ax_t) = (bx_t);                                \
                (bx) = (stack)->e[(top) - 2].u.v;               \
+               (bx_t) = (stack)->e[(top) - 2].type;            \
                (top)--;                                        \
        } while (0)
 
 const char *lttng_filter_print_op(enum filter_op op);
 
 int lttng_filter_validate_bytecode(struct bytecode_runtime *bytecode);
-int lttng_filter_specialize_bytecode(struct lttng_event *event,
+int lttng_filter_specialize_bytecode(const struct lttng_event_desc *event_desc,
                struct bytecode_runtime *bytecode);
 
 uint64_t lttng_filter_false(void *filter_data,
This page took 0.024442 seconds and 4 git commands to generate.