-/*
+/* SPDX-License-Identifier: MIT
+ *
* lttng-filter-interpreter.c
*
* LTTng modules filter interpreter.
*
* Copyright (C) 2010-2016 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- *
- * 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 <linux/uaccess.h>
+#include <wrapper/uaccess.h>
#include <wrapper/frame.h>
#include <wrapper/types.h>
#include <linux/swab.h>
char c;
/* Handle invalid access as end of string. */
- if (unlikely(!access_ok(VERIFY_READ,
+ if (unlikely(!lttng_access_ok(VERIFY_READ,
reg->u.s.user_str + offset,
sizeof(c))))
return '\0';
ret = -EINVAL;
goto end;
}
- stack_top->u.s.seq_len = SIZE_MAX;
+ stack_top->u.s.seq_len = LTTNG_SIZE_MAX;
stack_top->u.s.literal_type =
ESTACK_STRING_LITERAL_TYPE_NONE;
break;
[ FILTER_OP_LOAD_FIELD_DOUBLE ] = &&LABEL_FILTER_OP_LOAD_FIELD_DOUBLE,
[ FILTER_OP_UNARY_BIT_NOT ] = &&LABEL_FILTER_OP_UNARY_BIT_NOT,
+
+ [ FILTER_OP_RETURN_S64 ] = &&LABEL_FILTER_OP_RETURN_S64,
};
#endif /* #ifndef INTERPRETER_USE_SWITCH */
goto end;
OP(FILTER_OP_RETURN):
+ OP(FILTER_OP_RETURN_S64):
/* LTTNG_FILTER_DISCARD or LTTNG_FILTER_RECORD_FLAG */
retval = !!estack_ax_v;
ret = 0;
ret = -EINVAL;
goto end;
}
- res = (estack_bx_v >> estack_ax_v);
+ res = ((uint64_t) estack_bx_v >> (uint32_t) estack_ax_v);
estack_pop(stack, top, ax, bx);
estack_ax_v = res;
next_pc += sizeof(struct binary_op);
ret = -EINVAL;
goto end;
}
- res = (estack_bx_v << estack_ax_v);
+ res = ((uint64_t) estack_bx_v << (uint32_t) estack_ax_v);
estack_pop(stack, top, ax, bx);
estack_ax_v = res;
next_pc += sizeof(struct binary_op);
{
int64_t res;
- res = (estack_bx_v & estack_ax_v);
+ res = ((uint64_t) estack_bx_v & (uint64_t) estack_ax_v);
estack_pop(stack, top, ax, bx);
estack_ax_v = res;
next_pc += sizeof(struct binary_op);
{
int64_t res;
- res = (estack_bx_v | estack_ax_v);
+ res = ((uint64_t) estack_bx_v | (uint64_t) estack_ax_v);
estack_pop(stack, top, ax, bx);
estack_ax_v = res;
next_pc += sizeof(struct binary_op);
{
int64_t res;
- res = (estack_bx_v ^ estack_ax_v);
+ res = ((uint64_t) estack_bx_v ^ (uint64_t) estack_ax_v);
estack_pop(stack, top, ax, bx);
estack_ax_v = res;
next_pc += sizeof(struct binary_op);
OP(FILTER_OP_UNARY_BIT_NOT):
{
- estack_ax_v = ~estack_ax_v;
+ estack_ax_v = ~(uint64_t) estack_ax_v;
next_pc += sizeof(struct unary_op);
PO;
}
ret = -EINVAL;
goto end;
}
- estack_ax(stack, top)->u.s.seq_len = SIZE_MAX;
+ estack_ax(stack, top)->u.s.seq_len = LTTNG_SIZE_MAX;
estack_ax(stack, top)->u.s.literal_type =
ESTACK_STRING_LITERAL_TYPE_NONE;
next_pc += sizeof(struct load_op);