X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttng-filter-validator.c;h=2a5db1198215aabfc1d4e39f77cfc26e0f1b49cf;hb=499ac8be0b08816e44bdc76ce2b8bdd0c64a2909;hp=a4ca777563fa9ca13e85281500b1f3db17de4d4f;hpb=3aeca857621bb2feec78e1b0f54d2d64603c82db;p=lttng-modules.git diff --git a/lttng-filter-validator.c b/lttng-filter-validator.c index a4ca7775..2a5db119 100644 --- a/lttng-filter-validator.c +++ b/lttng-filter-validator.c @@ -1,27 +1,10 @@ -/* +/* SPDX-License-Identifier: MIT + * * lttng-filter-validator.c * * LTTng modules filter bytecode validator. * * Copyright (C) 2010-2016 Mathieu Desnoyers - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. */ #include @@ -993,60 +976,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 FILTER_OP_LOAD_FIELD_S8: - { - dbg_printk("Validate load field s8\n"); - break; - } case FILTER_OP_LOAD_FIELD_S16: - { - dbg_printk("Validate load field s16\n"); - break; - } case FILTER_OP_LOAD_FIELD_S32: - { - dbg_printk("Validate load field s32\n"); - break; - } case FILTER_OP_LOAD_FIELD_S64: - { - dbg_printk("Validate load field s64\n"); - break; - } case FILTER_OP_LOAD_FIELD_U8: - { - dbg_printk("Validate load field u8\n"); - break; - } case FILTER_OP_LOAD_FIELD_U16: - { - dbg_printk("Validate load field u16\n"); - break; - } case FILTER_OP_LOAD_FIELD_U32: - { - dbg_printk("Validate load field u32\n"); - break; - } case FILTER_OP_LOAD_FIELD_U64: - { - dbg_printk("Validate load field u64\n"); - break; - } case FILTER_OP_LOAD_FIELD_STRING: - { - dbg_printk("Validate load field string\n"); - break; - } case FILTER_OP_LOAD_FIELD_SEQUENCE: - { - dbg_printk("Validate load field sequence\n"); - break; - } case FILTER_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 FILTER_OP_GET_SYMBOL: