X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Flttng-bytecode-validator.c;fp=src%2Flttng-bytecode-validator.c;h=2892ac7dcb636b737bb886514464fe2fe63690bd;hb=c4bf9003172c02d6d99ecfa4c445e8f7327fbac4;hp=1bee0d65114b4c84926db8e4a8f70bf6ea1d790b;hpb=6f185e4fc107767e1b4f5f15abe9c62d431c9d66;p=lttng-modules.git diff --git a/src/lttng-bytecode-validator.c b/src/lttng-bytecode-validator.c index 1bee0d65..2892ac7d 100644 --- a/src/lttng-bytecode-validator.c +++ b/src/lttng-bytecode-validator.c @@ -997,60 +997,30 @@ int validate_instruction_context(struct bytecode_runtime *bytecode, dbg_printk("Validate load field\n"); break; } + + /* + * Disallow already specialized bytecode op load field instructions to + * ensure that the received bytecode does not: + * + * - Read user-space memory without proper get_user accessors, + * - Read a memory area larger than the memory targeted by the instrumentation. + */ case BYTECODE_OP_LOAD_FIELD_S8: - { - dbg_printk("Validate load field s8\n"); - break; - } case BYTECODE_OP_LOAD_FIELD_S16: - { - dbg_printk("Validate load field s16\n"); - break; - } case BYTECODE_OP_LOAD_FIELD_S32: - { - dbg_printk("Validate load field s32\n"); - break; - } case BYTECODE_OP_LOAD_FIELD_S64: - { - dbg_printk("Validate load field s64\n"); - break; - } case BYTECODE_OP_LOAD_FIELD_U8: - { - dbg_printk("Validate load field u8\n"); - break; - } case BYTECODE_OP_LOAD_FIELD_U16: - { - dbg_printk("Validate load field u16\n"); - break; - } case BYTECODE_OP_LOAD_FIELD_U32: - { - dbg_printk("Validate load field u32\n"); - break; - } case BYTECODE_OP_LOAD_FIELD_U64: - { - dbg_printk("Validate load field u64\n"); - break; - } case BYTECODE_OP_LOAD_FIELD_STRING: - { - dbg_printk("Validate load field string\n"); - break; - } case BYTECODE_OP_LOAD_FIELD_SEQUENCE: - { - dbg_printk("Validate load field sequence\n"); - break; - } case BYTECODE_OP_LOAD_FIELD_DOUBLE: { - dbg_printk("Validate load field double\n"); - break; + dbg_printk("Validate load field, reject specialized load instruction (%d)\n", + (int) opcode); + ret = -EINVAL; + goto end; } case BYTECODE_OP_GET_SYMBOL: