From 1122b45dfdef5da534cb18da7cb9c688f9a2b528 Mon Sep 17 00:00:00 2001 From: Alice Frosi Date: Wed, 5 Apr 2023 16:35:08 +0200 Subject: Add support for 64 bits arguments --- cooker/filter.h | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) (limited to 'cooker/filter.h') diff --git a/cooker/filter.h b/cooker/filter.h index c8e74be..7705414 100644 --- a/cooker/filter.h +++ b/cooker/filter.h @@ -1,25 +1,53 @@ #ifndef FILTER_H_ #define FILTER_H_ +#include + #include #include #include +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +#define ENDIAN(_lo, _hi) _lo, _hi +#define LO_ARG(idx) offsetof(struct seccomp_data, args[(idx)]) +#define HI_ARG(idx) offsetof(struct seccomp_data, args[(idx)]) + sizeof(__u32) +#define get_hi(x) ((uint32_t)((x) >> 32)) +#define get_lo(x) ((uint32_t)((x)&0xffffffff)) +#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +#define ENDIAN(_lo, _hi) _hi, _lo +#define LO_ARG(idx) offsetof(struct seccomp_data, args[(idx)]) + sizeof(__u32) +#define HI_ARG(idx) offsetof(struct seccomp_data, args[(idx)]) +#define get_lo(x) ((uint32_t)((x) >> 32)) +#define get_hi(x) ((uint32_t)((x)&0xffffffff)) +#else +#error "Unknown endianness" +#endif + #define JGE(nr, right, left) \ BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, (nr), (right), (left)) #define JUMPA(jump) BPF_JUMP(BPF_JMP | BPF_JA, (jump), 0, 0) -#define EQ(nr, a1, a2) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, (nr), (a1), (a2)) +#define EQ(x, a1, a2) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, (x), (a1), (a2)) #define LOAD(x) BPF_STMT(BPF_LD | BPF_W | BPF_ABS, (x)) - #define MAX_FILTER 1024 #define MAX_JUMPS 128 #define EMPTY -1 +enum arg_type { NO_CHECK, U32, U64 }; + +union arg_value { + uint32_t v32; + uint64_t v64; +}; + +struct arg { + enum arg_type type; + union arg_value value; +}; + struct bpf_call { char *name; - int args[6]; - bool check_arg[6]; + struct arg args[6]; }; struct syscall_entry { -- cgit v1.2.3