^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Testsuite for BPF interpreter and BPF JIT compiler
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/init.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/filter.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/bpf.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <linux/skbuff.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <linux/netdevice.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/if_vlan.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <linux/random.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include <linux/highmem.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #include <linux/sched.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) /* General test specific settings */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define MAX_SUBTESTS 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define MAX_TESTRUNS 1000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define MAX_DATA 128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define MAX_INSNS 512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define MAX_K 0xffffFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) /* Few constants used to init test 'skb' */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define SKB_TYPE 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define SKB_MARK 0x1234aaaa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define SKB_HASH 0x1234aaab
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define SKB_QUEUE_MAP 123
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define SKB_VLAN_TCI 0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #define SKB_VLAN_PRESENT 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #define SKB_DEV_IFINDEX 577
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define SKB_DEV_TYPE 588
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) /* Redefine REGs to make tests less verbose */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define R0 BPF_REG_0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define R1 BPF_REG_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define R2 BPF_REG_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define R3 BPF_REG_3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define R4 BPF_REG_4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define R5 BPF_REG_5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define R6 BPF_REG_6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define R7 BPF_REG_7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define R8 BPF_REG_8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define R9 BPF_REG_9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define R10 BPF_REG_10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) /* Flags that can be passed to test cases */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define FLAG_NO_DATA BIT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define FLAG_EXPECTED_FAIL BIT(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define FLAG_SKB_FRAG BIT(2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) CLASSIC = BIT(6), /* Old BPF instructions only. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) INTERNAL = BIT(7), /* Extended instruction set. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) #define TEST_TYPE_MASK (CLASSIC | INTERNAL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) struct bpf_test {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) const char *descr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) struct sock_filter insns[MAX_INSNS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) struct bpf_insn insns_int[MAX_INSNS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) void *insns;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) unsigned int len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) } ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) } u;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) __u8 aux;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) __u8 data[MAX_DATA];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) int data_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) __u32 result;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) } test[MAX_SUBTESTS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) int (*fill_helper)(struct bpf_test *self);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) int expected_errcode; /* used when FLAG_EXPECTED_FAIL is set in the aux */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) __u8 frag_data[MAX_DATA];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) int stack_depth; /* for eBPF only, since tests don't call verifier */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) /* Large test cases need separate allocation and fill handler. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) static int bpf_fill_maxinsns1(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) unsigned int len = BPF_MAXINSNS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) struct sock_filter *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) __u32 k = ~0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) for (i = 0; i < len; i++, k--)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) insn[i] = __BPF_STMT(BPF_RET | BPF_K, k);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) static int bpf_fill_maxinsns2(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) unsigned int len = BPF_MAXINSNS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) struct sock_filter *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) for (i = 0; i < len; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) insn[i] = __BPF_STMT(BPF_RET | BPF_K, 0xfefefefe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) static int bpf_fill_maxinsns3(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) unsigned int len = BPF_MAXINSNS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) struct sock_filter *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) struct rnd_state rnd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) prandom_seed_state(&rnd, 3141592653589793238ULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) for (i = 0; i < len - 1; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) __u32 k = prandom_u32_state(&rnd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) insn[i] = __BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, k);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) insn[len - 1] = __BPF_STMT(BPF_RET | BPF_A, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) static int bpf_fill_maxinsns4(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) unsigned int len = BPF_MAXINSNS + 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) struct sock_filter *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) for (i = 0; i < len; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) insn[i] = __BPF_STMT(BPF_RET | BPF_K, 0xfefefefe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) static int bpf_fill_maxinsns5(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) unsigned int len = BPF_MAXINSNS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) struct sock_filter *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) insn[0] = __BPF_JUMP(BPF_JMP | BPF_JA, len - 2, 0, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) for (i = 1; i < len - 1; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) insn[i] = __BPF_STMT(BPF_RET | BPF_K, 0xfefefefe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) insn[len - 1] = __BPF_STMT(BPF_RET | BPF_K, 0xabababab);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) static int bpf_fill_maxinsns6(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) unsigned int len = BPF_MAXINSNS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) struct sock_filter *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) for (i = 0; i < len - 1; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) insn[i] = __BPF_STMT(BPF_LD | BPF_W | BPF_ABS, SKF_AD_OFF +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) SKF_AD_VLAN_TAG_PRESENT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) insn[len - 1] = __BPF_STMT(BPF_RET | BPF_A, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) static int bpf_fill_maxinsns7(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) unsigned int len = BPF_MAXINSNS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) struct sock_filter *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) for (i = 0; i < len - 4; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) insn[i] = __BPF_STMT(BPF_LD | BPF_W | BPF_ABS, SKF_AD_OFF +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) SKF_AD_CPU);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) insn[len - 4] = __BPF_STMT(BPF_MISC | BPF_TAX, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) insn[len - 3] = __BPF_STMT(BPF_LD | BPF_W | BPF_ABS, SKF_AD_OFF +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) SKF_AD_CPU);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) insn[len - 2] = __BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) insn[len - 1] = __BPF_STMT(BPF_RET | BPF_A, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) static int bpf_fill_maxinsns8(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) unsigned int len = BPF_MAXINSNS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) struct sock_filter *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) int i, jmp_off = len - 3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) insn[0] = __BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) for (i = 1; i < len - 1; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) insn[i] = __BPF_JUMP(BPF_JMP | BPF_JGT, 0xffffffff, jmp_off--, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) insn[len - 1] = __BPF_STMT(BPF_RET | BPF_A, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) static int bpf_fill_maxinsns9(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) unsigned int len = BPF_MAXINSNS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) struct bpf_insn *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) insn[0] = BPF_JMP_IMM(BPF_JA, 0, 0, len - 2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) insn[1] = BPF_ALU32_IMM(BPF_MOV, R0, 0xcbababab);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) insn[2] = BPF_EXIT_INSN();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) for (i = 3; i < len - 2; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) insn[i] = BPF_ALU32_IMM(BPF_MOV, R0, 0xfefefefe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) insn[len - 2] = BPF_EXIT_INSN();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) insn[len - 1] = BPF_JMP_IMM(BPF_JA, 0, 0, -(len - 1));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) static int bpf_fill_maxinsns10(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) unsigned int len = BPF_MAXINSNS, hlen = len - 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) struct bpf_insn *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) for (i = 0; i < hlen / 2; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) insn[i] = BPF_JMP_IMM(BPF_JA, 0, 0, hlen - 2 - 2 * i);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) for (i = hlen - 1; i > hlen / 2; i--)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) insn[i] = BPF_JMP_IMM(BPF_JA, 0, 0, hlen - 1 - 2 * i);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) insn[hlen / 2] = BPF_JMP_IMM(BPF_JA, 0, 0, hlen / 2 - 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) insn[hlen] = BPF_ALU32_IMM(BPF_MOV, R0, 0xabababac);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) insn[hlen + 1] = BPF_EXIT_INSN();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) static int __bpf_fill_ja(struct bpf_test *self, unsigned int len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) unsigned int plen)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) struct sock_filter *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) unsigned int rlen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) int i, j;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) rlen = (len % plen) - 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) for (i = 0; i + plen < len; i += plen)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) for (j = 0; j < plen; j++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) insn[i + j] = __BPF_JUMP(BPF_JMP | BPF_JA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) plen - 1 - j, 0, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) for (j = 0; j < rlen; j++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) insn[i + j] = __BPF_JUMP(BPF_JMP | BPF_JA, rlen - 1 - j,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 0, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) insn[len - 1] = __BPF_STMT(BPF_RET | BPF_K, 0xababcbac);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) static int bpf_fill_maxinsns11(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) /* Hits 70 passes on x86_64, so cannot get JITed there. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) return __bpf_fill_ja(self, BPF_MAXINSNS, 68);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) static int bpf_fill_maxinsns12(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) unsigned int len = BPF_MAXINSNS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) struct sock_filter *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) int i = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) insn[0] = __BPF_JUMP(BPF_JMP | BPF_JA, len - 2, 0, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) for (i = 1; i < len - 1; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) insn[i] = __BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) insn[len - 1] = __BPF_STMT(BPF_RET | BPF_K, 0xabababab);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) static int bpf_fill_maxinsns13(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) unsigned int len = BPF_MAXINSNS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) struct sock_filter *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) int i = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) for (i = 0; i < len - 3; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) insn[i] = __BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) insn[len - 3] = __BPF_STMT(BPF_LD | BPF_IMM, 0xabababab);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) insn[len - 2] = __BPF_STMT(BPF_ALU | BPF_XOR | BPF_X, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) insn[len - 1] = __BPF_STMT(BPF_RET | BPF_A, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) static int bpf_fill_ja(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) /* Hits exactly 11 passes on x86_64 JIT. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) return __bpf_fill_ja(self, 12, 9);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) static int bpf_fill_ld_abs_get_processor_id(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) unsigned int len = BPF_MAXINSNS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) struct sock_filter *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) for (i = 0; i < len - 1; i += 2) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) insn[i] = __BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) insn[i + 1] = __BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) SKF_AD_OFF + SKF_AD_CPU);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) insn[len - 1] = __BPF_STMT(BPF_RET | BPF_K, 0xbee);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) static int __bpf_fill_stxdw(struct bpf_test *self, int size)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) unsigned int len = BPF_MAXINSNS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) struct bpf_insn *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) insn = kmalloc_array(len, sizeof(*insn), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) if (!insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) insn[0] = BPF_ALU32_IMM(BPF_MOV, R0, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) insn[1] = BPF_ST_MEM(size, R10, -40, 42);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) for (i = 2; i < len - 2; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) insn[i] = BPF_STX_XADD(size, R10, R0, -40);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) insn[len - 2] = BPF_LDX_MEM(size, R0, R10, -40);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) insn[len - 1] = BPF_EXIT_INSN();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) self->u.ptr.insns = insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) self->u.ptr.len = len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) self->stack_depth = 40;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) static int bpf_fill_stxw(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) return __bpf_fill_stxdw(self, BPF_W);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) static int bpf_fill_stxdw(struct bpf_test *self)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) return __bpf_fill_stxdw(self, BPF_DW);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) static struct bpf_test tests[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) "TAX",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) BPF_STMT(BPF_LD | BPF_IMM, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) BPF_STMT(BPF_LD | BPF_IMM, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) BPF_STMT(BPF_ALU | BPF_NEG, 0), /* A == -3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) BPF_STMT(BPF_LD | BPF_LEN, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) BPF_STMT(BPF_MISC | BPF_TAX, 0), /* X == len - 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) BPF_STMT(BPF_LD | BPF_B | BPF_IND, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) { 10, 20, 30, 40, 50 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) { { 2, 10 }, { 3, 20 }, { 4, 30 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) "TXA",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) BPF_STMT(BPF_LDX | BPF_LEN, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) BPF_STMT(BPF_RET | BPF_A, 0) /* A == len * 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) { 10, 20, 30, 40, 50 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) { { 1, 2 }, { 3, 6 }, { 4, 8 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) "ADD_SUB_MUL_K",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) BPF_STMT(BPF_LD | BPF_IMM, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) BPF_STMT(BPF_LDX | BPF_IMM, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) BPF_STMT(BPF_ALU | BPF_MUL | BPF_K, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) { { 0, 0xfffffffd } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) "DIV_MOD_KX",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) BPF_STMT(BPF_LD | BPF_IMM, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) BPF_STMT(BPF_ALU | BPF_DIV | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 0x70000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) BPF_STMT(BPF_ALU | BPF_MOD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) BPF_STMT(BPF_ALU | BPF_MOD | BPF_K, 0x70000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) { { 0, 0x20000000 } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) "AND_OR_LSH_K",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) BPF_STMT(BPF_LD | BPF_IMM, 0xff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) BPF_STMT(BPF_ALU | BPF_AND | BPF_K, 0xf0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) BPF_STMT(BPF_ALU | BPF_LSH | BPF_K, 27),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) BPF_STMT(BPF_LD | BPF_IMM, 0xf),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) BPF_STMT(BPF_ALU | BPF_OR | BPF_K, 0xf0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) { { 0, 0x800000ff }, { 1, 0x800000ff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) "LD_IMM_0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) BPF_STMT(BPF_LD | BPF_IMM, 0), /* ld #0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) BPF_STMT(BPF_RET | BPF_K, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) BPF_STMT(BPF_RET | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) { { 1, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) "LD_IND",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) BPF_STMT(BPF_LDX | BPF_LEN, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) BPF_STMT(BPF_LD | BPF_H | BPF_IND, MAX_K),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) BPF_STMT(BPF_RET | BPF_K, 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) { { 1, 0 }, { 10, 0 }, { 60, 0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) "LD_ABS",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 1000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) BPF_STMT(BPF_RET | BPF_K, 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) { { 1, 0 }, { 10, 0 }, { 60, 0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) "LD_ABS_LL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_LL_OFF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_LL_OFF + 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) { 1, 2, 3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) { { 1, 0 }, { 2, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) "LD_IND_LL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) BPF_STMT(BPF_LD | BPF_IMM, SKF_LL_OFF - 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) BPF_STMT(BPF_LDX | BPF_LEN, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) BPF_STMT(BPF_LD | BPF_B | BPF_IND, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) { 1, 2, 3, 0xff },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) { { 1, 1 }, { 3, 3 }, { 4, 0xff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) "LD_ABS_NET",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_NET_OFF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_NET_OFF + 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) { { 15, 0 }, { 16, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) "LD_IND_NET",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) BPF_STMT(BPF_LD | BPF_IMM, SKF_NET_OFF - 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) BPF_STMT(BPF_LDX | BPF_LEN, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) BPF_STMT(BPF_LD | BPF_B | BPF_IND, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) { { 14, 0 }, { 15, 1 }, { 17, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) "LD_PKTTYPE",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) SKF_AD_OFF + SKF_AD_PKTTYPE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, SKB_TYPE, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) BPF_STMT(BPF_RET | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) SKF_AD_OFF + SKF_AD_PKTTYPE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, SKB_TYPE, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) BPF_STMT(BPF_RET | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) SKF_AD_OFF + SKF_AD_PKTTYPE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, SKB_TYPE, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) BPF_STMT(BPF_RET | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) { { 1, 3 }, { 10, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) "LD_MARK",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) SKF_AD_OFF + SKF_AD_MARK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) { { 1, SKB_MARK}, { 10, SKB_MARK} },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) "LD_RXHASH",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) SKF_AD_OFF + SKF_AD_RXHASH),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) { { 1, SKB_HASH}, { 10, SKB_HASH} },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) "LD_QUEUE",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) SKF_AD_OFF + SKF_AD_QUEUE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) { { 1, SKB_QUEUE_MAP }, { 10, SKB_QUEUE_MAP } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) "LD_PROTOCOL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 20, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) BPF_STMT(BPF_RET | BPF_K, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) SKF_AD_OFF + SKF_AD_PROTOCOL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 30, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) BPF_STMT(BPF_RET | BPF_K, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) { 10, 20, 30 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) { { 10, ETH_P_IP }, { 100, ETH_P_IP } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) "LD_VLAN_TAG",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) SKF_AD_OFF + SKF_AD_VLAN_TAG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) { 1, SKB_VLAN_TCI },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) { 10, SKB_VLAN_TCI }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) "LD_VLAN_TAG_PRESENT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) SKF_AD_OFF + SKF_AD_VLAN_TAG_PRESENT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) { 1, SKB_VLAN_PRESENT },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) { 10, SKB_VLAN_PRESENT }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) "LD_IFINDEX",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) SKF_AD_OFF + SKF_AD_IFINDEX),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) { { 1, SKB_DEV_IFINDEX }, { 10, SKB_DEV_IFINDEX } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) "LD_HATYPE",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) SKF_AD_OFF + SKF_AD_HATYPE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) { { 1, SKB_DEV_TYPE }, { 10, SKB_DEV_TYPE } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) "LD_CPU",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) SKF_AD_OFF + SKF_AD_CPU),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) SKF_AD_OFF + SKF_AD_CPU),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) { { 1, 0 }, { 10, 0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) "LD_NLATTR",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) BPF_STMT(BPF_LDX | BPF_IMM, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) BPF_STMT(BPF_LDX | BPF_IMM, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) SKF_AD_OFF + SKF_AD_NLATTR),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) #ifdef __BIG_ENDIAN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) { 0xff, 0xff, 0, 4, 0, 2, 0, 4, 0, 3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) { 0xff, 0xff, 4, 0, 2, 0, 4, 0, 3, 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) { { 4, 0 }, { 20, 6 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) "LD_NLATTR_NEST",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) BPF_STMT(BPF_LD | BPF_IMM, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) BPF_STMT(BPF_LDX | BPF_IMM, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) SKF_AD_OFF + SKF_AD_NLATTR_NEST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) BPF_STMT(BPF_LD | BPF_IMM, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) SKF_AD_OFF + SKF_AD_NLATTR_NEST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) BPF_STMT(BPF_LD | BPF_IMM, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) SKF_AD_OFF + SKF_AD_NLATTR_NEST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) BPF_STMT(BPF_LD | BPF_IMM, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) SKF_AD_OFF + SKF_AD_NLATTR_NEST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) BPF_STMT(BPF_LD | BPF_IMM, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) SKF_AD_OFF + SKF_AD_NLATTR_NEST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) BPF_STMT(BPF_LD | BPF_IMM, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) SKF_AD_OFF + SKF_AD_NLATTR_NEST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) BPF_STMT(BPF_LD | BPF_IMM, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) SKF_AD_OFF + SKF_AD_NLATTR_NEST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) BPF_STMT(BPF_LD | BPF_IMM, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) SKF_AD_OFF + SKF_AD_NLATTR_NEST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) #ifdef __BIG_ENDIAN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) { 0xff, 0xff, 0, 12, 0, 1, 0, 4, 0, 2, 0, 4, 0, 3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) { 0xff, 0xff, 12, 0, 1, 0, 4, 0, 2, 0, 4, 0, 3, 0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) { { 4, 0 }, { 20, 10 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) "LD_PAYLOAD_OFF",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) SKF_AD_OFF + SKF_AD_PAY_OFFSET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) SKF_AD_OFF + SKF_AD_PAY_OFFSET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) SKF_AD_OFF + SKF_AD_PAY_OFFSET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) SKF_AD_OFF + SKF_AD_PAY_OFFSET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) SKF_AD_OFF + SKF_AD_PAY_OFFSET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) /* 00:00:00:00:00:00 > 00:00:00:00:00:00, ethtype IPv4 (0x0800),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) * length 98: 127.0.0.1 > 127.0.0.1: ICMP echo request,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) * id 9737, seq 1, length 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) 0x08, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) 0x45, 0x00, 0x00, 0x54, 0xac, 0x8b, 0x40, 0x00, 0x40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) 0x01, 0x90, 0x1b, 0x7f, 0x00, 0x00, 0x01 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) { { 30, 0 }, { 100, 42 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) "LD_ANC_XOR",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) BPF_STMT(BPF_LD | BPF_IMM, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) BPF_STMT(BPF_LDX | BPF_IMM, 300),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) SKF_AD_OFF + SKF_AD_ALU_XOR_X),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) { { 4, 0xA ^ 300 }, { 20, 0xA ^ 300 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) "SPILL_FILL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) BPF_STMT(BPF_LDX | BPF_LEN, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) BPF_STMT(BPF_LD | BPF_IMM, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) BPF_STMT(BPF_ALU | BPF_RSH, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) BPF_STMT(BPF_ALU | BPF_XOR | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) BPF_STMT(BPF_ST, 1), /* M1 = 1 ^ len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) BPF_STMT(BPF_ALU | BPF_XOR | BPF_K, 0x80000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) BPF_STMT(BPF_ST, 2), /* M2 = 1 ^ len ^ 0x80000000 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) BPF_STMT(BPF_STX, 15), /* M3 = len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) BPF_STMT(BPF_LDX | BPF_MEM, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) BPF_STMT(BPF_LD | BPF_MEM, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) BPF_STMT(BPF_ALU | BPF_XOR | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) BPF_STMT(BPF_LDX | BPF_MEM, 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) BPF_STMT(BPF_ALU | BPF_XOR | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892) { { 1, 0x80000001 }, { 2, 0x80000002 }, { 60, 0x80000000 ^ 60 } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) "JEQ",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897) BPF_STMT(BPF_LDX | BPF_LEN, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898) BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_X, 0, 0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) BPF_STMT(BPF_RET | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901) BPF_STMT(BPF_RET | BPF_K, MAX_K)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 902) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 903) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 904) { 3, 3, 3, 3, 3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 905) { { 1, 0 }, { 3, 1 }, { 4, MAX_K } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 906) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 907) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 908) "JGT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 909) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 910) BPF_STMT(BPF_LDX | BPF_LEN, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 911) BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 912) BPF_JUMP(BPF_JMP | BPF_JGT | BPF_X, 0, 0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 913) BPF_STMT(BPF_RET | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 914) BPF_STMT(BPF_RET | BPF_K, MAX_K)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 915) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 916) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 917) { 4, 4, 4, 3, 3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 918) { { 2, 0 }, { 3, 1 }, { 4, MAX_K } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 919) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 920) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 921) "JGE (jt 0), test 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 922) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 923) BPF_STMT(BPF_LDX | BPF_LEN, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 924) BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 925) BPF_JUMP(BPF_JMP | BPF_JGE | BPF_X, 0, 0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 926) BPF_STMT(BPF_RET | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 927) BPF_STMT(BPF_RET | BPF_K, MAX_K)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 928) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 929) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 930) { 4, 4, 4, 3, 3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 931) { { 2, 0 }, { 3, 1 }, { 4, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 932) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 933) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 934) "JGE (jt 0), test 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 935) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 936) BPF_STMT(BPF_LDX | BPF_LEN, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 937) BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 938) BPF_JUMP(BPF_JMP | BPF_JGE | BPF_X, 0, 0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 939) BPF_STMT(BPF_RET | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 940) BPF_STMT(BPF_RET | BPF_K, MAX_K)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 941) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 942) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 943) { 4, 4, 5, 3, 3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 944) { { 4, 1 }, { 5, 1 }, { 6, MAX_K } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 945) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 946) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 947) "JGE",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 948) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 949) BPF_STMT(BPF_LDX | BPF_LEN, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 950) BPF_STMT(BPF_LD | BPF_B | BPF_IND, MAX_K),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 951) BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 1, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 952) BPF_STMT(BPF_RET | BPF_K, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 953) BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 2, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 954) BPF_STMT(BPF_RET | BPF_K, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 955) BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 3, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 956) BPF_STMT(BPF_RET | BPF_K, 30),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 957) BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 4, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 958) BPF_STMT(BPF_RET | BPF_K, 40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 959) BPF_STMT(BPF_RET | BPF_K, MAX_K)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 960) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 961) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 962) { 1, 2, 3, 4, 5 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 963) { { 1, 20 }, { 3, 40 }, { 5, MAX_K } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 964) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 965) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 966) "JSET",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 967) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 968) BPF_JUMP(BPF_JMP | BPF_JA, 0, 0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 969) BPF_JUMP(BPF_JMP | BPF_JA, 1, 1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 970) BPF_JUMP(BPF_JMP | BPF_JA, 0, 0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 971) BPF_JUMP(BPF_JMP | BPF_JA, 0, 0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 972) BPF_STMT(BPF_LDX | BPF_LEN, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 973) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 974) BPF_STMT(BPF_ALU | BPF_SUB | BPF_K, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 975) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 976) BPF_STMT(BPF_LD | BPF_W | BPF_IND, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 977) BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 1, 0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 978) BPF_STMT(BPF_RET | BPF_K, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 979) BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0x80000000, 0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 980) BPF_STMT(BPF_RET | BPF_K, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 981) BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 982) BPF_STMT(BPF_RET | BPF_K, 30),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 983) BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 984) BPF_STMT(BPF_RET | BPF_K, 30),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 985) BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 986) BPF_STMT(BPF_RET | BPF_K, 30),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 987) BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 988) BPF_STMT(BPF_RET | BPF_K, 30),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 989) BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 990) BPF_STMT(BPF_RET | BPF_K, 30),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 991) BPF_STMT(BPF_RET | BPF_K, MAX_K)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 992) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 993) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 994) { 0, 0xAA, 0x55, 1 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 995) { { 4, 10 }, { 5, 20 }, { 6, MAX_K } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 996) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 997) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 998) "tcpdump port 22",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 999) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x86dd, 0, 8), /* IPv6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x84, 2, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x6, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x11, 0, 17),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 54),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 14, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 56),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 12, 13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x0800, 0, 12), /* IPv4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 23),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x84, 2, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x6, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x11, 0, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0x1fff, 6, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) BPF_STMT(BPF_LD | BPF_H | BPF_IND, 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 2, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) BPF_STMT(BPF_LD | BPF_H | BPF_IND, 16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) BPF_STMT(BPF_RET | BPF_K, 0xffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) BPF_STMT(BPF_RET | BPF_K, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) /* 3c:07:54:43:e5:76 > 10:bf:48:d6:43:d6, ethertype IPv4(0x0800)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) * length 114: 10.1.1.149.49700 > 10.1.2.10.22: Flags [P.],
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) * seq 1305692979:1305693027, ack 3650467037, win 65535,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) * options [nop,nop,TS val 2502645400 ecr 3971138], length 48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) { 0x10, 0xbf, 0x48, 0xd6, 0x43, 0xd6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) 0x3c, 0x07, 0x54, 0x43, 0xe5, 0x76,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) 0x08, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) 0x45, 0x10, 0x00, 0x64, 0x75, 0xb5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) 0x40, 0x00, 0x40, 0x06, 0xad, 0x2e, /* IP header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) 0x0a, 0x01, 0x01, 0x95, /* ip src */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) 0x0a, 0x01, 0x02, 0x0a, /* ip dst */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) 0xc2, 0x24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039) 0x00, 0x16 /* dst port */ },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) { { 10, 0 }, { 30, 0 }, { 100, 65535 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) "tcpdump complex",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) /* tcpdump -nei eth0 'tcp port 22 and (((ip[2:2] -
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) * ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0) and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) * (len > 115 or len < 30000000000)' -d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x86dd, 30, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x800, 0, 29),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052) BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 23),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x6, 0, 27),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055) BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0x1fff, 25, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) BPF_STMT(BPF_LD | BPF_H | BPF_IND, 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 2, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) BPF_STMT(BPF_LD | BPF_H | BPF_IND, 16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 0, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) BPF_STMT(BPF_ST, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) BPF_STMT(BPF_ALU | BPF_AND | BPF_K, 0xf),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) BPF_STMT(BPF_ALU | BPF_LSH | BPF_K, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) BPF_STMT(BPF_MISC | BPF_TAX, 0x5), /* libpcap emits K on TAX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067) BPF_STMT(BPF_LD | BPF_MEM, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) BPF_STMT(BPF_ST, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) BPF_STMT(BPF_LD | BPF_B | BPF_IND, 26),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) BPF_STMT(BPF_ALU | BPF_AND | BPF_K, 0xf0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073) BPF_STMT(BPF_ALU | BPF_RSH | BPF_K, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) BPF_STMT(BPF_MISC | BPF_TAX, 0x9), /* libpcap emits K on TAX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) BPF_STMT(BPF_LD | BPF_MEM, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_X, 0, 4, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) BPF_STMT(BPF_LD | BPF_LEN, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) BPF_JUMP(BPF_JMP | BPF_JGT | BPF_K, 0x73, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079) BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 0xfc23ac00, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) BPF_STMT(BPF_RET | BPF_K, 0xffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) BPF_STMT(BPF_RET | BPF_K, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) { 0x10, 0xbf, 0x48, 0xd6, 0x43, 0xd6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) 0x3c, 0x07, 0x54, 0x43, 0xe5, 0x76,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) 0x08, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) 0x45, 0x10, 0x00, 0x64, 0x75, 0xb5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) 0x40, 0x00, 0x40, 0x06, 0xad, 0x2e, /* IP header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) 0x0a, 0x01, 0x01, 0x95, /* ip src */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) 0x0a, 0x01, 0x02, 0x0a, /* ip dst */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) 0xc2, 0x24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) 0x00, 0x16 /* dst port */ },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) { { 10, 0 }, { 30, 0 }, { 100, 65535 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) "RET_A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) /* check that unitialized X and A contain zeros */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) BPF_STMT(BPF_RET | BPF_A, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) { {1, 0}, {2, 0} },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) "INT: ADD trivial",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) BPF_ALU64_IMM(BPF_MOV, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) BPF_ALU64_IMM(BPF_ADD, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) BPF_ALU64_IMM(BPF_MOV, R2, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) BPF_ALU64_REG(BPF_SUB, R1, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) BPF_ALU64_IMM(BPF_ADD, R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114) BPF_ALU64_IMM(BPF_MUL, R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) BPF_ALU64_REG(BPF_MOV, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120) { { 0, 0xfffffffd } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) "INT: MUL_X",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) BPF_ALU64_IMM(BPF_MOV, R0, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) BPF_ALU64_IMM(BPF_MOV, R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) BPF_ALU64_IMM(BPF_MOV, R2, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) BPF_ALU64_REG(BPF_MUL, R1, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) BPF_JMP_IMM(BPF_JEQ, R1, 0xfffffffd, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) BPF_ALU64_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) { { 0, 1 } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) "INT: MUL_X2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141) BPF_ALU32_IMM(BPF_MOV, R0, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) BPF_ALU32_IMM(BPF_MOV, R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) BPF_ALU32_IMM(BPF_MOV, R2, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) BPF_ALU64_REG(BPF_MUL, R1, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) BPF_ALU64_IMM(BPF_RSH, R1, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) BPF_JMP_IMM(BPF_JEQ, R1, 0x2ffffff, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) { { 0, 1 } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156) "INT: MUL32_X",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158) BPF_ALU32_IMM(BPF_MOV, R0, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159) BPF_ALU64_IMM(BPF_MOV, R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) BPF_ALU32_IMM(BPF_MOV, R2, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161) BPF_ALU32_REG(BPF_MUL, R1, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) BPF_ALU64_IMM(BPF_RSH, R1, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163) BPF_JMP_IMM(BPF_JEQ, R1, 0xffffff, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) { { 0, 1 } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) /* Have to test all register combinations, since
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174) * JITing of different registers will produce
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) * different asm code.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177) "INT: ADD 64-bit",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179) BPF_ALU64_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180) BPF_ALU64_IMM(BPF_MOV, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181) BPF_ALU64_IMM(BPF_MOV, R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) BPF_ALU64_IMM(BPF_MOV, R3, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183) BPF_ALU64_IMM(BPF_MOV, R4, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) BPF_ALU64_IMM(BPF_MOV, R5, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) BPF_ALU64_IMM(BPF_MOV, R6, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186) BPF_ALU64_IMM(BPF_MOV, R7, 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187) BPF_ALU64_IMM(BPF_MOV, R8, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188) BPF_ALU64_IMM(BPF_MOV, R9, 9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189) BPF_ALU64_IMM(BPF_ADD, R0, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190) BPF_ALU64_IMM(BPF_ADD, R1, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191) BPF_ALU64_IMM(BPF_ADD, R2, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192) BPF_ALU64_IMM(BPF_ADD, R3, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193) BPF_ALU64_IMM(BPF_ADD, R4, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) BPF_ALU64_IMM(BPF_ADD, R5, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195) BPF_ALU64_IMM(BPF_ADD, R6, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196) BPF_ALU64_IMM(BPF_ADD, R7, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197) BPF_ALU64_IMM(BPF_ADD, R8, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198) BPF_ALU64_IMM(BPF_ADD, R9, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199) BPF_ALU64_IMM(BPF_SUB, R0, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) BPF_ALU64_IMM(BPF_SUB, R1, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201) BPF_ALU64_IMM(BPF_SUB, R2, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202) BPF_ALU64_IMM(BPF_SUB, R3, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) BPF_ALU64_IMM(BPF_SUB, R4, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) BPF_ALU64_IMM(BPF_SUB, R5, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) BPF_ALU64_IMM(BPF_SUB, R6, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1206) BPF_ALU64_IMM(BPF_SUB, R7, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1207) BPF_ALU64_IMM(BPF_SUB, R8, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1208) BPF_ALU64_IMM(BPF_SUB, R9, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1209) BPF_ALU64_REG(BPF_ADD, R0, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1210) BPF_ALU64_REG(BPF_ADD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1211) BPF_ALU64_REG(BPF_ADD, R0, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1212) BPF_ALU64_REG(BPF_ADD, R0, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1213) BPF_ALU64_REG(BPF_ADD, R0, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1214) BPF_ALU64_REG(BPF_ADD, R0, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1215) BPF_ALU64_REG(BPF_ADD, R0, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1216) BPF_ALU64_REG(BPF_ADD, R0, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1217) BPF_ALU64_REG(BPF_ADD, R0, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1218) BPF_ALU64_REG(BPF_ADD, R0, R9), /* R0 == 155 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1219) BPF_JMP_IMM(BPF_JEQ, R0, 155, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1220) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1221) BPF_ALU64_REG(BPF_ADD, R1, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1222) BPF_ALU64_REG(BPF_ADD, R1, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1223) BPF_ALU64_REG(BPF_ADD, R1, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1224) BPF_ALU64_REG(BPF_ADD, R1, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1225) BPF_ALU64_REG(BPF_ADD, R1, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1226) BPF_ALU64_REG(BPF_ADD, R1, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1227) BPF_ALU64_REG(BPF_ADD, R1, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1228) BPF_ALU64_REG(BPF_ADD, R1, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1229) BPF_ALU64_REG(BPF_ADD, R1, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1230) BPF_ALU64_REG(BPF_ADD, R1, R9), /* R1 == 456 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1231) BPF_JMP_IMM(BPF_JEQ, R1, 456, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1232) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1233) BPF_ALU64_REG(BPF_ADD, R2, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1234) BPF_ALU64_REG(BPF_ADD, R2, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1235) BPF_ALU64_REG(BPF_ADD, R2, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1236) BPF_ALU64_REG(BPF_ADD, R2, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1237) BPF_ALU64_REG(BPF_ADD, R2, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1238) BPF_ALU64_REG(BPF_ADD, R2, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1239) BPF_ALU64_REG(BPF_ADD, R2, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1240) BPF_ALU64_REG(BPF_ADD, R2, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1241) BPF_ALU64_REG(BPF_ADD, R2, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1242) BPF_ALU64_REG(BPF_ADD, R2, R9), /* R2 == 1358 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1243) BPF_JMP_IMM(BPF_JEQ, R2, 1358, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1244) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1245) BPF_ALU64_REG(BPF_ADD, R3, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1246) BPF_ALU64_REG(BPF_ADD, R3, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1247) BPF_ALU64_REG(BPF_ADD, R3, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1248) BPF_ALU64_REG(BPF_ADD, R3, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1249) BPF_ALU64_REG(BPF_ADD, R3, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1250) BPF_ALU64_REG(BPF_ADD, R3, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1251) BPF_ALU64_REG(BPF_ADD, R3, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1252) BPF_ALU64_REG(BPF_ADD, R3, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1253) BPF_ALU64_REG(BPF_ADD, R3, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1254) BPF_ALU64_REG(BPF_ADD, R3, R9), /* R3 == 4063 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1255) BPF_JMP_IMM(BPF_JEQ, R3, 4063, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1256) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1257) BPF_ALU64_REG(BPF_ADD, R4, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1258) BPF_ALU64_REG(BPF_ADD, R4, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1259) BPF_ALU64_REG(BPF_ADD, R4, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1260) BPF_ALU64_REG(BPF_ADD, R4, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1261) BPF_ALU64_REG(BPF_ADD, R4, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1262) BPF_ALU64_REG(BPF_ADD, R4, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1263) BPF_ALU64_REG(BPF_ADD, R4, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1264) BPF_ALU64_REG(BPF_ADD, R4, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1265) BPF_ALU64_REG(BPF_ADD, R4, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1266) BPF_ALU64_REG(BPF_ADD, R4, R9), /* R4 == 12177 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1267) BPF_JMP_IMM(BPF_JEQ, R4, 12177, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1268) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1269) BPF_ALU64_REG(BPF_ADD, R5, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1270) BPF_ALU64_REG(BPF_ADD, R5, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1271) BPF_ALU64_REG(BPF_ADD, R5, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1272) BPF_ALU64_REG(BPF_ADD, R5, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1273) BPF_ALU64_REG(BPF_ADD, R5, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1274) BPF_ALU64_REG(BPF_ADD, R5, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1275) BPF_ALU64_REG(BPF_ADD, R5, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1276) BPF_ALU64_REG(BPF_ADD, R5, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1277) BPF_ALU64_REG(BPF_ADD, R5, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1278) BPF_ALU64_REG(BPF_ADD, R5, R9), /* R5 == 36518 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1279) BPF_JMP_IMM(BPF_JEQ, R5, 36518, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1280) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1281) BPF_ALU64_REG(BPF_ADD, R6, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1282) BPF_ALU64_REG(BPF_ADD, R6, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1283) BPF_ALU64_REG(BPF_ADD, R6, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1284) BPF_ALU64_REG(BPF_ADD, R6, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1285) BPF_ALU64_REG(BPF_ADD, R6, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1286) BPF_ALU64_REG(BPF_ADD, R6, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1287) BPF_ALU64_REG(BPF_ADD, R6, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1288) BPF_ALU64_REG(BPF_ADD, R6, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1289) BPF_ALU64_REG(BPF_ADD, R6, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1290) BPF_ALU64_REG(BPF_ADD, R6, R9), /* R6 == 109540 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1291) BPF_JMP_IMM(BPF_JEQ, R6, 109540, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1292) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1293) BPF_ALU64_REG(BPF_ADD, R7, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1294) BPF_ALU64_REG(BPF_ADD, R7, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1295) BPF_ALU64_REG(BPF_ADD, R7, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1296) BPF_ALU64_REG(BPF_ADD, R7, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1297) BPF_ALU64_REG(BPF_ADD, R7, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1298) BPF_ALU64_REG(BPF_ADD, R7, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1299) BPF_ALU64_REG(BPF_ADD, R7, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1300) BPF_ALU64_REG(BPF_ADD, R7, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1301) BPF_ALU64_REG(BPF_ADD, R7, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1302) BPF_ALU64_REG(BPF_ADD, R7, R9), /* R7 == 328605 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1303) BPF_JMP_IMM(BPF_JEQ, R7, 328605, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1304) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1305) BPF_ALU64_REG(BPF_ADD, R8, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1306) BPF_ALU64_REG(BPF_ADD, R8, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1307) BPF_ALU64_REG(BPF_ADD, R8, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1308) BPF_ALU64_REG(BPF_ADD, R8, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1309) BPF_ALU64_REG(BPF_ADD, R8, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1310) BPF_ALU64_REG(BPF_ADD, R8, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1311) BPF_ALU64_REG(BPF_ADD, R8, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1312) BPF_ALU64_REG(BPF_ADD, R8, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1313) BPF_ALU64_REG(BPF_ADD, R8, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1314) BPF_ALU64_REG(BPF_ADD, R8, R9), /* R8 == 985799 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1315) BPF_JMP_IMM(BPF_JEQ, R8, 985799, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1316) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1317) BPF_ALU64_REG(BPF_ADD, R9, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1318) BPF_ALU64_REG(BPF_ADD, R9, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1319) BPF_ALU64_REG(BPF_ADD, R9, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1320) BPF_ALU64_REG(BPF_ADD, R9, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1321) BPF_ALU64_REG(BPF_ADD, R9, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1322) BPF_ALU64_REG(BPF_ADD, R9, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1323) BPF_ALU64_REG(BPF_ADD, R9, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1324) BPF_ALU64_REG(BPF_ADD, R9, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1325) BPF_ALU64_REG(BPF_ADD, R9, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1326) BPF_ALU64_REG(BPF_ADD, R9, R9), /* R9 == 2957380 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1327) BPF_ALU64_REG(BPF_MOV, R0, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1328) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1329) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1330) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1331) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1332) { { 0, 2957380 } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1333) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1334) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1335) "INT: ADD 32-bit",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1336) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1337) BPF_ALU32_IMM(BPF_MOV, R0, 20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1338) BPF_ALU32_IMM(BPF_MOV, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1339) BPF_ALU32_IMM(BPF_MOV, R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1340) BPF_ALU32_IMM(BPF_MOV, R3, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1341) BPF_ALU32_IMM(BPF_MOV, R4, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1342) BPF_ALU32_IMM(BPF_MOV, R5, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1343) BPF_ALU32_IMM(BPF_MOV, R6, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1344) BPF_ALU32_IMM(BPF_MOV, R7, 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1345) BPF_ALU32_IMM(BPF_MOV, R8, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1346) BPF_ALU32_IMM(BPF_MOV, R9, 9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1347) BPF_ALU64_IMM(BPF_ADD, R1, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1348) BPF_ALU64_IMM(BPF_ADD, R2, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1349) BPF_ALU64_IMM(BPF_ADD, R3, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1350) BPF_ALU64_IMM(BPF_ADD, R4, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1351) BPF_ALU64_IMM(BPF_ADD, R5, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1352) BPF_ALU64_IMM(BPF_ADD, R6, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1353) BPF_ALU64_IMM(BPF_ADD, R7, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1354) BPF_ALU64_IMM(BPF_ADD, R8, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1355) BPF_ALU64_IMM(BPF_ADD, R9, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1356) BPF_ALU32_REG(BPF_ADD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1357) BPF_ALU32_REG(BPF_ADD, R0, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1358) BPF_ALU32_REG(BPF_ADD, R0, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1359) BPF_ALU32_REG(BPF_ADD, R0, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1360) BPF_ALU32_REG(BPF_ADD, R0, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1361) BPF_ALU32_REG(BPF_ADD, R0, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1362) BPF_ALU32_REG(BPF_ADD, R0, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1363) BPF_ALU32_REG(BPF_ADD, R0, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1364) BPF_ALU32_REG(BPF_ADD, R0, R9), /* R0 == 155 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1365) BPF_JMP_IMM(BPF_JEQ, R0, 155, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1366) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1367) BPF_ALU32_REG(BPF_ADD, R1, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1368) BPF_ALU32_REG(BPF_ADD, R1, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1369) BPF_ALU32_REG(BPF_ADD, R1, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1370) BPF_ALU32_REG(BPF_ADD, R1, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1371) BPF_ALU32_REG(BPF_ADD, R1, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1372) BPF_ALU32_REG(BPF_ADD, R1, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1373) BPF_ALU32_REG(BPF_ADD, R1, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1374) BPF_ALU32_REG(BPF_ADD, R1, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1375) BPF_ALU32_REG(BPF_ADD, R1, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1376) BPF_ALU32_REG(BPF_ADD, R1, R9), /* R1 == 456 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1377) BPF_JMP_IMM(BPF_JEQ, R1, 456, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1378) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1379) BPF_ALU32_REG(BPF_ADD, R2, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1380) BPF_ALU32_REG(BPF_ADD, R2, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1381) BPF_ALU32_REG(BPF_ADD, R2, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1382) BPF_ALU32_REG(BPF_ADD, R2, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1383) BPF_ALU32_REG(BPF_ADD, R2, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1384) BPF_ALU32_REG(BPF_ADD, R2, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1385) BPF_ALU32_REG(BPF_ADD, R2, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1386) BPF_ALU32_REG(BPF_ADD, R2, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1387) BPF_ALU32_REG(BPF_ADD, R2, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1388) BPF_ALU32_REG(BPF_ADD, R2, R9), /* R2 == 1358 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1389) BPF_JMP_IMM(BPF_JEQ, R2, 1358, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1390) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1391) BPF_ALU32_REG(BPF_ADD, R3, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1392) BPF_ALU32_REG(BPF_ADD, R3, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1393) BPF_ALU32_REG(BPF_ADD, R3, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1394) BPF_ALU32_REG(BPF_ADD, R3, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1395) BPF_ALU32_REG(BPF_ADD, R3, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1396) BPF_ALU32_REG(BPF_ADD, R3, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1397) BPF_ALU32_REG(BPF_ADD, R3, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1398) BPF_ALU32_REG(BPF_ADD, R3, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1399) BPF_ALU32_REG(BPF_ADD, R3, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1400) BPF_ALU32_REG(BPF_ADD, R3, R9), /* R3 == 4063 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1401) BPF_JMP_IMM(BPF_JEQ, R3, 4063, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1402) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1403) BPF_ALU32_REG(BPF_ADD, R4, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1404) BPF_ALU32_REG(BPF_ADD, R4, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1405) BPF_ALU32_REG(BPF_ADD, R4, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1406) BPF_ALU32_REG(BPF_ADD, R4, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1407) BPF_ALU32_REG(BPF_ADD, R4, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1408) BPF_ALU32_REG(BPF_ADD, R4, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1409) BPF_ALU32_REG(BPF_ADD, R4, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1410) BPF_ALU32_REG(BPF_ADD, R4, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1411) BPF_ALU32_REG(BPF_ADD, R4, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1412) BPF_ALU32_REG(BPF_ADD, R4, R9), /* R4 == 12177 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1413) BPF_JMP_IMM(BPF_JEQ, R4, 12177, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1414) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1415) BPF_ALU32_REG(BPF_ADD, R5, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1416) BPF_ALU32_REG(BPF_ADD, R5, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1417) BPF_ALU32_REG(BPF_ADD, R5, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1418) BPF_ALU32_REG(BPF_ADD, R5, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1419) BPF_ALU32_REG(BPF_ADD, R5, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1420) BPF_ALU32_REG(BPF_ADD, R5, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1421) BPF_ALU32_REG(BPF_ADD, R5, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1422) BPF_ALU32_REG(BPF_ADD, R5, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1423) BPF_ALU32_REG(BPF_ADD, R5, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1424) BPF_ALU32_REG(BPF_ADD, R5, R9), /* R5 == 36518 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1425) BPF_JMP_IMM(BPF_JEQ, R5, 36518, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1426) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1427) BPF_ALU32_REG(BPF_ADD, R6, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1428) BPF_ALU32_REG(BPF_ADD, R6, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1429) BPF_ALU32_REG(BPF_ADD, R6, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1430) BPF_ALU32_REG(BPF_ADD, R6, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1431) BPF_ALU32_REG(BPF_ADD, R6, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1432) BPF_ALU32_REG(BPF_ADD, R6, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1433) BPF_ALU32_REG(BPF_ADD, R6, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1434) BPF_ALU32_REG(BPF_ADD, R6, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1435) BPF_ALU32_REG(BPF_ADD, R6, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1436) BPF_ALU32_REG(BPF_ADD, R6, R9), /* R6 == 109540 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1437) BPF_JMP_IMM(BPF_JEQ, R6, 109540, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1438) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1439) BPF_ALU32_REG(BPF_ADD, R7, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1440) BPF_ALU32_REG(BPF_ADD, R7, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1441) BPF_ALU32_REG(BPF_ADD, R7, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1442) BPF_ALU32_REG(BPF_ADD, R7, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1443) BPF_ALU32_REG(BPF_ADD, R7, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1444) BPF_ALU32_REG(BPF_ADD, R7, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1445) BPF_ALU32_REG(BPF_ADD, R7, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1446) BPF_ALU32_REG(BPF_ADD, R7, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1447) BPF_ALU32_REG(BPF_ADD, R7, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1448) BPF_ALU32_REG(BPF_ADD, R7, R9), /* R7 == 328605 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1449) BPF_JMP_IMM(BPF_JEQ, R7, 328605, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1450) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1451) BPF_ALU32_REG(BPF_ADD, R8, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1452) BPF_ALU32_REG(BPF_ADD, R8, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1453) BPF_ALU32_REG(BPF_ADD, R8, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1454) BPF_ALU32_REG(BPF_ADD, R8, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1455) BPF_ALU32_REG(BPF_ADD, R8, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1456) BPF_ALU32_REG(BPF_ADD, R8, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1457) BPF_ALU32_REG(BPF_ADD, R8, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1458) BPF_ALU32_REG(BPF_ADD, R8, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1459) BPF_ALU32_REG(BPF_ADD, R8, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1460) BPF_ALU32_REG(BPF_ADD, R8, R9), /* R8 == 985799 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1461) BPF_JMP_IMM(BPF_JEQ, R8, 985799, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1462) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1463) BPF_ALU32_REG(BPF_ADD, R9, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1464) BPF_ALU32_REG(BPF_ADD, R9, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1465) BPF_ALU32_REG(BPF_ADD, R9, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1466) BPF_ALU32_REG(BPF_ADD, R9, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1467) BPF_ALU32_REG(BPF_ADD, R9, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1468) BPF_ALU32_REG(BPF_ADD, R9, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1469) BPF_ALU32_REG(BPF_ADD, R9, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1470) BPF_ALU32_REG(BPF_ADD, R9, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1471) BPF_ALU32_REG(BPF_ADD, R9, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1472) BPF_ALU32_REG(BPF_ADD, R9, R9), /* R9 == 2957380 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1473) BPF_ALU32_REG(BPF_MOV, R0, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1474) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1475) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1476) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1477) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1478) { { 0, 2957380 } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1479) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1480) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1481) "INT: SUB",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1482) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1483) BPF_ALU64_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1484) BPF_ALU64_IMM(BPF_MOV, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1485) BPF_ALU64_IMM(BPF_MOV, R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1486) BPF_ALU64_IMM(BPF_MOV, R3, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1487) BPF_ALU64_IMM(BPF_MOV, R4, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1488) BPF_ALU64_IMM(BPF_MOV, R5, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1489) BPF_ALU64_IMM(BPF_MOV, R6, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1490) BPF_ALU64_IMM(BPF_MOV, R7, 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1491) BPF_ALU64_IMM(BPF_MOV, R8, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1492) BPF_ALU64_IMM(BPF_MOV, R9, 9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1493) BPF_ALU64_REG(BPF_SUB, R0, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1494) BPF_ALU64_REG(BPF_SUB, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1495) BPF_ALU64_REG(BPF_SUB, R0, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1496) BPF_ALU64_REG(BPF_SUB, R0, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1497) BPF_ALU64_REG(BPF_SUB, R0, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1498) BPF_ALU64_REG(BPF_SUB, R0, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1499) BPF_ALU64_REG(BPF_SUB, R0, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1500) BPF_ALU64_REG(BPF_SUB, R0, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1501) BPF_ALU64_REG(BPF_SUB, R0, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1502) BPF_ALU64_REG(BPF_SUB, R0, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1503) BPF_ALU64_IMM(BPF_SUB, R0, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1504) BPF_JMP_IMM(BPF_JEQ, R0, -55, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1505) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1506) BPF_ALU64_REG(BPF_SUB, R1, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1507) BPF_ALU64_REG(BPF_SUB, R1, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1508) BPF_ALU64_REG(BPF_SUB, R1, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1509) BPF_ALU64_REG(BPF_SUB, R1, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1510) BPF_ALU64_REG(BPF_SUB, R1, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1511) BPF_ALU64_REG(BPF_SUB, R1, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1512) BPF_ALU64_REG(BPF_SUB, R1, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1513) BPF_ALU64_REG(BPF_SUB, R1, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1514) BPF_ALU64_REG(BPF_SUB, R1, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1515) BPF_ALU64_IMM(BPF_SUB, R1, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1516) BPF_ALU64_REG(BPF_SUB, R2, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1517) BPF_ALU64_REG(BPF_SUB, R2, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1518) BPF_ALU64_REG(BPF_SUB, R2, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1519) BPF_ALU64_REG(BPF_SUB, R2, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1520) BPF_ALU64_REG(BPF_SUB, R2, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1521) BPF_ALU64_REG(BPF_SUB, R2, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1522) BPF_ALU64_REG(BPF_SUB, R2, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1523) BPF_ALU64_REG(BPF_SUB, R2, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1524) BPF_ALU64_REG(BPF_SUB, R2, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1525) BPF_ALU64_IMM(BPF_SUB, R2, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1526) BPF_ALU64_REG(BPF_SUB, R3, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1527) BPF_ALU64_REG(BPF_SUB, R3, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1528) BPF_ALU64_REG(BPF_SUB, R3, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1529) BPF_ALU64_REG(BPF_SUB, R3, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1530) BPF_ALU64_REG(BPF_SUB, R3, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1531) BPF_ALU64_REG(BPF_SUB, R3, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1532) BPF_ALU64_REG(BPF_SUB, R3, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1533) BPF_ALU64_REG(BPF_SUB, R3, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1534) BPF_ALU64_REG(BPF_SUB, R3, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1535) BPF_ALU64_IMM(BPF_SUB, R3, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1536) BPF_ALU64_REG(BPF_SUB, R4, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1537) BPF_ALU64_REG(BPF_SUB, R4, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1538) BPF_ALU64_REG(BPF_SUB, R4, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1539) BPF_ALU64_REG(BPF_SUB, R4, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1540) BPF_ALU64_REG(BPF_SUB, R4, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1541) BPF_ALU64_REG(BPF_SUB, R4, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1542) BPF_ALU64_REG(BPF_SUB, R4, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1543) BPF_ALU64_REG(BPF_SUB, R4, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1544) BPF_ALU64_REG(BPF_SUB, R4, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1545) BPF_ALU64_IMM(BPF_SUB, R4, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1546) BPF_ALU64_REG(BPF_SUB, R5, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1547) BPF_ALU64_REG(BPF_SUB, R5, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1548) BPF_ALU64_REG(BPF_SUB, R5, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1549) BPF_ALU64_REG(BPF_SUB, R5, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1550) BPF_ALU64_REG(BPF_SUB, R5, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1551) BPF_ALU64_REG(BPF_SUB, R5, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1552) BPF_ALU64_REG(BPF_SUB, R5, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1553) BPF_ALU64_REG(BPF_SUB, R5, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1554) BPF_ALU64_REG(BPF_SUB, R5, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1555) BPF_ALU64_IMM(BPF_SUB, R5, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1556) BPF_ALU64_REG(BPF_SUB, R6, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1557) BPF_ALU64_REG(BPF_SUB, R6, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1558) BPF_ALU64_REG(BPF_SUB, R6, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1559) BPF_ALU64_REG(BPF_SUB, R6, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1560) BPF_ALU64_REG(BPF_SUB, R6, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1561) BPF_ALU64_REG(BPF_SUB, R6, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1562) BPF_ALU64_REG(BPF_SUB, R6, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1563) BPF_ALU64_REG(BPF_SUB, R6, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1564) BPF_ALU64_REG(BPF_SUB, R6, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1565) BPF_ALU64_IMM(BPF_SUB, R6, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1566) BPF_ALU64_REG(BPF_SUB, R7, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1567) BPF_ALU64_REG(BPF_SUB, R7, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1568) BPF_ALU64_REG(BPF_SUB, R7, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1569) BPF_ALU64_REG(BPF_SUB, R7, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1570) BPF_ALU64_REG(BPF_SUB, R7, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1571) BPF_ALU64_REG(BPF_SUB, R7, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1572) BPF_ALU64_REG(BPF_SUB, R7, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1573) BPF_ALU64_REG(BPF_SUB, R7, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1574) BPF_ALU64_REG(BPF_SUB, R7, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1575) BPF_ALU64_IMM(BPF_SUB, R7, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1576) BPF_ALU64_REG(BPF_SUB, R8, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1577) BPF_ALU64_REG(BPF_SUB, R8, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1578) BPF_ALU64_REG(BPF_SUB, R8, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1579) BPF_ALU64_REG(BPF_SUB, R8, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1580) BPF_ALU64_REG(BPF_SUB, R8, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1581) BPF_ALU64_REG(BPF_SUB, R8, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1582) BPF_ALU64_REG(BPF_SUB, R8, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1583) BPF_ALU64_REG(BPF_SUB, R8, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1584) BPF_ALU64_REG(BPF_SUB, R8, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1585) BPF_ALU64_IMM(BPF_SUB, R8, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1586) BPF_ALU64_REG(BPF_SUB, R9, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1587) BPF_ALU64_REG(BPF_SUB, R9, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1588) BPF_ALU64_REG(BPF_SUB, R9, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1589) BPF_ALU64_REG(BPF_SUB, R9, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1590) BPF_ALU64_REG(BPF_SUB, R9, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1591) BPF_ALU64_REG(BPF_SUB, R9, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1592) BPF_ALU64_REG(BPF_SUB, R9, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1593) BPF_ALU64_REG(BPF_SUB, R9, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1594) BPF_ALU64_REG(BPF_SUB, R9, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1595) BPF_ALU64_IMM(BPF_SUB, R9, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1596) BPF_ALU64_IMM(BPF_SUB, R0, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1597) BPF_ALU64_IMM(BPF_NEG, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1598) BPF_ALU64_REG(BPF_SUB, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1599) BPF_ALU64_REG(BPF_SUB, R0, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1600) BPF_ALU64_REG(BPF_SUB, R0, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1601) BPF_ALU64_REG(BPF_SUB, R0, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1602) BPF_ALU64_REG(BPF_SUB, R0, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1603) BPF_ALU64_REG(BPF_SUB, R0, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1604) BPF_ALU64_REG(BPF_SUB, R0, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1605) BPF_ALU64_REG(BPF_SUB, R0, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1606) BPF_ALU64_REG(BPF_SUB, R0, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1607) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1608) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1609) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1610) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1611) { { 0, 11 } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1612) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1613) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1614) "INT: XOR",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1615) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1616) BPF_ALU64_REG(BPF_SUB, R0, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1617) BPF_ALU64_REG(BPF_XOR, R1, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1618) BPF_JMP_REG(BPF_JEQ, R0, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1619) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1620) BPF_ALU64_IMM(BPF_MOV, R0, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1621) BPF_ALU64_IMM(BPF_MOV, R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1622) BPF_ALU64_REG(BPF_SUB, R1, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1623) BPF_ALU64_REG(BPF_XOR, R2, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1624) BPF_JMP_REG(BPF_JEQ, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1625) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1626) BPF_ALU64_REG(BPF_SUB, R2, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1627) BPF_ALU64_REG(BPF_XOR, R3, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1628) BPF_ALU64_IMM(BPF_MOV, R0, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1629) BPF_ALU64_IMM(BPF_MOV, R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1630) BPF_JMP_REG(BPF_JEQ, R2, R3, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1631) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1632) BPF_ALU64_REG(BPF_SUB, R3, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1633) BPF_ALU64_REG(BPF_XOR, R4, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1634) BPF_ALU64_IMM(BPF_MOV, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1635) BPF_ALU64_IMM(BPF_MOV, R5, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1636) BPF_JMP_REG(BPF_JEQ, R3, R4, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1637) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1638) BPF_ALU64_REG(BPF_SUB, R4, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1639) BPF_ALU64_REG(BPF_XOR, R5, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1640) BPF_ALU64_IMM(BPF_MOV, R3, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1641) BPF_ALU64_IMM(BPF_MOV, R7, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1642) BPF_JMP_REG(BPF_JEQ, R5, R4, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1643) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1644) BPF_ALU64_IMM(BPF_MOV, R5, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1645) BPF_ALU64_REG(BPF_SUB, R5, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1646) BPF_ALU64_REG(BPF_XOR, R6, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1647) BPF_ALU64_IMM(BPF_MOV, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1648) BPF_ALU64_IMM(BPF_MOV, R8, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1649) BPF_JMP_REG(BPF_JEQ, R5, R6, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1650) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1651) BPF_ALU64_REG(BPF_SUB, R6, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1652) BPF_ALU64_REG(BPF_XOR, R7, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1653) BPF_JMP_REG(BPF_JEQ, R7, R6, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1654) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1655) BPF_ALU64_REG(BPF_SUB, R7, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1656) BPF_ALU64_REG(BPF_XOR, R8, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1657) BPF_JMP_REG(BPF_JEQ, R7, R8, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1658) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1659) BPF_ALU64_REG(BPF_SUB, R8, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1660) BPF_ALU64_REG(BPF_XOR, R9, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1661) BPF_JMP_REG(BPF_JEQ, R9, R8, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1662) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1663) BPF_ALU64_REG(BPF_SUB, R9, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1664) BPF_ALU64_REG(BPF_XOR, R0, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1665) BPF_JMP_REG(BPF_JEQ, R9, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1666) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1667) BPF_ALU64_REG(BPF_SUB, R1, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1668) BPF_ALU64_REG(BPF_XOR, R0, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1669) BPF_JMP_REG(BPF_JEQ, R9, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1670) BPF_ALU64_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1671) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1672) BPF_ALU64_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1673) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1674) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1675) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1676) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1677) { { 0, 1 } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1678) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1679) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1680) "INT: MUL",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1681) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1682) BPF_ALU64_IMM(BPF_MOV, R0, 11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1683) BPF_ALU64_IMM(BPF_MOV, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1684) BPF_ALU64_IMM(BPF_MOV, R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1685) BPF_ALU64_IMM(BPF_MOV, R3, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1686) BPF_ALU64_IMM(BPF_MOV, R4, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1687) BPF_ALU64_IMM(BPF_MOV, R5, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1688) BPF_ALU64_IMM(BPF_MOV, R6, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1689) BPF_ALU64_IMM(BPF_MOV, R7, 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1690) BPF_ALU64_IMM(BPF_MOV, R8, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1691) BPF_ALU64_IMM(BPF_MOV, R9, 9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1692) BPF_ALU64_REG(BPF_MUL, R0, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1693) BPF_ALU64_REG(BPF_MUL, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1694) BPF_ALU64_REG(BPF_MUL, R0, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1695) BPF_ALU64_REG(BPF_MUL, R0, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1696) BPF_ALU64_REG(BPF_MUL, R0, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1697) BPF_ALU64_REG(BPF_MUL, R0, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1698) BPF_ALU64_REG(BPF_MUL, R0, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1699) BPF_ALU64_REG(BPF_MUL, R0, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1700) BPF_ALU64_REG(BPF_MUL, R0, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1701) BPF_ALU64_REG(BPF_MUL, R0, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1702) BPF_ALU64_IMM(BPF_MUL, R0, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1703) BPF_JMP_IMM(BPF_JEQ, R0, 439084800, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1704) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1705) BPF_ALU64_REG(BPF_MUL, R1, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1706) BPF_ALU64_REG(BPF_MUL, R1, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1707) BPF_ALU64_REG(BPF_MUL, R1, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1708) BPF_ALU64_REG(BPF_MUL, R1, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1709) BPF_ALU64_REG(BPF_MUL, R1, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1710) BPF_ALU64_REG(BPF_MUL, R1, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1711) BPF_ALU64_REG(BPF_MUL, R1, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1712) BPF_ALU64_REG(BPF_MUL, R1, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1713) BPF_ALU64_REG(BPF_MUL, R1, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1714) BPF_ALU64_IMM(BPF_MUL, R1, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1715) BPF_ALU64_REG(BPF_MOV, R2, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1716) BPF_ALU64_IMM(BPF_RSH, R2, 32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1717) BPF_JMP_IMM(BPF_JEQ, R2, 0x5a924, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1718) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1719) BPF_ALU64_IMM(BPF_LSH, R1, 32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1720) BPF_ALU64_IMM(BPF_ARSH, R1, 32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1721) BPF_JMP_IMM(BPF_JEQ, R1, 0xebb90000, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1722) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1723) BPF_ALU64_REG(BPF_MUL, R2, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1724) BPF_ALU64_REG(BPF_MUL, R2, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1725) BPF_ALU64_REG(BPF_MUL, R2, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1726) BPF_ALU64_REG(BPF_MUL, R2, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1727) BPF_ALU64_REG(BPF_MUL, R2, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1728) BPF_ALU64_REG(BPF_MUL, R2, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1729) BPF_ALU64_REG(BPF_MUL, R2, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1730) BPF_ALU64_REG(BPF_MUL, R2, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1731) BPF_ALU64_REG(BPF_MUL, R2, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1732) BPF_ALU64_IMM(BPF_MUL, R2, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1733) BPF_ALU64_IMM(BPF_RSH, R2, 32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1734) BPF_ALU64_REG(BPF_MOV, R0, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1735) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1736) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1737) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1738) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1739) { { 0, 0x35d97ef2 } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1740) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1741) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1742) "MOV REG64",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1743) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1744) BPF_LD_IMM64(R0, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1745) BPF_MOV64_REG(R1, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1746) BPF_MOV64_REG(R2, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1747) BPF_MOV64_REG(R3, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1748) BPF_MOV64_REG(R4, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1749) BPF_MOV64_REG(R5, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1750) BPF_MOV64_REG(R6, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1751) BPF_MOV64_REG(R7, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1752) BPF_MOV64_REG(R8, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1753) BPF_MOV64_REG(R9, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1754) BPF_ALU64_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1755) BPF_ALU64_IMM(BPF_MOV, R1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1756) BPF_ALU64_IMM(BPF_MOV, R2, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1757) BPF_ALU64_IMM(BPF_MOV, R3, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1758) BPF_ALU64_IMM(BPF_MOV, R4, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1759) BPF_ALU64_IMM(BPF_MOV, R5, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1760) BPF_ALU64_IMM(BPF_MOV, R6, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1761) BPF_ALU64_IMM(BPF_MOV, R7, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1762) BPF_ALU64_IMM(BPF_MOV, R8, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1763) BPF_ALU64_IMM(BPF_MOV, R9, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1764) BPF_ALU64_REG(BPF_ADD, R0, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1765) BPF_ALU64_REG(BPF_ADD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1766) BPF_ALU64_REG(BPF_ADD, R0, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1767) BPF_ALU64_REG(BPF_ADD, R0, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1768) BPF_ALU64_REG(BPF_ADD, R0, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1769) BPF_ALU64_REG(BPF_ADD, R0, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1770) BPF_ALU64_REG(BPF_ADD, R0, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1771) BPF_ALU64_REG(BPF_ADD, R0, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1772) BPF_ALU64_REG(BPF_ADD, R0, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1773) BPF_ALU64_REG(BPF_ADD, R0, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1774) BPF_ALU64_IMM(BPF_ADD, R0, 0xfefe),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1775) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1776) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1777) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1778) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1779) { { 0, 0xfefe } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1780) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1781) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1782) "MOV REG32",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1783) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1784) BPF_LD_IMM64(R0, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1785) BPF_MOV64_REG(R1, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1786) BPF_MOV64_REG(R2, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1787) BPF_MOV64_REG(R3, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1788) BPF_MOV64_REG(R4, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1789) BPF_MOV64_REG(R5, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1790) BPF_MOV64_REG(R6, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1791) BPF_MOV64_REG(R7, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1792) BPF_MOV64_REG(R8, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1793) BPF_MOV64_REG(R9, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1794) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1795) BPF_ALU32_IMM(BPF_MOV, R1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1796) BPF_ALU32_IMM(BPF_MOV, R2, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1797) BPF_ALU32_IMM(BPF_MOV, R3, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1798) BPF_ALU32_IMM(BPF_MOV, R4, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1799) BPF_ALU32_IMM(BPF_MOV, R5, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1800) BPF_ALU32_IMM(BPF_MOV, R6, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1801) BPF_ALU32_IMM(BPF_MOV, R7, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1802) BPF_ALU32_IMM(BPF_MOV, R8, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1803) BPF_ALU32_IMM(BPF_MOV, R9, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1804) BPF_ALU64_REG(BPF_ADD, R0, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1805) BPF_ALU64_REG(BPF_ADD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1806) BPF_ALU64_REG(BPF_ADD, R0, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1807) BPF_ALU64_REG(BPF_ADD, R0, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1808) BPF_ALU64_REG(BPF_ADD, R0, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1809) BPF_ALU64_REG(BPF_ADD, R0, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1810) BPF_ALU64_REG(BPF_ADD, R0, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1811) BPF_ALU64_REG(BPF_ADD, R0, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1812) BPF_ALU64_REG(BPF_ADD, R0, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1813) BPF_ALU64_REG(BPF_ADD, R0, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1814) BPF_ALU64_IMM(BPF_ADD, R0, 0xfefe),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1815) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1816) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1817) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1818) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1819) { { 0, 0xfefe } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1820) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1821) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1822) "LD IMM64",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1823) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1824) BPF_LD_IMM64(R0, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1825) BPF_MOV64_REG(R1, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1826) BPF_MOV64_REG(R2, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1827) BPF_MOV64_REG(R3, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1828) BPF_MOV64_REG(R4, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1829) BPF_MOV64_REG(R5, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1830) BPF_MOV64_REG(R6, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1831) BPF_MOV64_REG(R7, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1832) BPF_MOV64_REG(R8, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1833) BPF_MOV64_REG(R9, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1834) BPF_LD_IMM64(R0, 0x0LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1835) BPF_LD_IMM64(R1, 0x0LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1836) BPF_LD_IMM64(R2, 0x0LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1837) BPF_LD_IMM64(R3, 0x0LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1838) BPF_LD_IMM64(R4, 0x0LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1839) BPF_LD_IMM64(R5, 0x0LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1840) BPF_LD_IMM64(R6, 0x0LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1841) BPF_LD_IMM64(R7, 0x0LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1842) BPF_LD_IMM64(R8, 0x0LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1843) BPF_LD_IMM64(R9, 0x0LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1844) BPF_ALU64_REG(BPF_ADD, R0, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1845) BPF_ALU64_REG(BPF_ADD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1846) BPF_ALU64_REG(BPF_ADD, R0, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1847) BPF_ALU64_REG(BPF_ADD, R0, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1848) BPF_ALU64_REG(BPF_ADD, R0, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1849) BPF_ALU64_REG(BPF_ADD, R0, R5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1850) BPF_ALU64_REG(BPF_ADD, R0, R6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1851) BPF_ALU64_REG(BPF_ADD, R0, R7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1852) BPF_ALU64_REG(BPF_ADD, R0, R8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1853) BPF_ALU64_REG(BPF_ADD, R0, R9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1854) BPF_ALU64_IMM(BPF_ADD, R0, 0xfefe),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1855) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1856) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1857) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1858) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1859) { { 0, 0xfefe } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1860) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1861) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1862) "INT: ALU MIX",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1863) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1864) BPF_ALU64_IMM(BPF_MOV, R0, 11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1865) BPF_ALU64_IMM(BPF_ADD, R0, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1866) BPF_ALU64_IMM(BPF_MOV, R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1867) BPF_ALU64_IMM(BPF_XOR, R2, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1868) BPF_ALU64_REG(BPF_DIV, R0, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1869) BPF_JMP_IMM(BPF_JEQ, R0, 10, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1870) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1871) BPF_ALU64_IMM(BPF_MOD, R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1872) BPF_JMP_IMM(BPF_JEQ, R0, 1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1873) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1874) BPF_ALU64_IMM(BPF_MOV, R0, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1875) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1876) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1877) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1878) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1879) { { 0, -1 } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1880) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1881) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1882) "INT: shifts by register",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1883) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1884) BPF_MOV64_IMM(R0, -1234),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1885) BPF_MOV64_IMM(R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1886) BPF_ALU32_REG(BPF_RSH, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1887) BPF_JMP_IMM(BPF_JEQ, R0, 0x7ffffd97, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1888) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1889) BPF_MOV64_IMM(R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1890) BPF_ALU64_REG(BPF_LSH, R0, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1891) BPF_MOV32_IMM(R4, -1234),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1892) BPF_JMP_REG(BPF_JEQ, R0, R4, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1893) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1894) BPF_ALU64_IMM(BPF_AND, R4, 63),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1895) BPF_ALU64_REG(BPF_LSH, R0, R4), /* R0 <= 46 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1896) BPF_MOV64_IMM(R3, 47),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1897) BPF_ALU64_REG(BPF_ARSH, R0, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1898) BPF_JMP_IMM(BPF_JEQ, R0, -617, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1899) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1900) BPF_MOV64_IMM(R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1901) BPF_ALU64_REG(BPF_LSH, R4, R2), /* R4 = 46 << 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1902) BPF_JMP_IMM(BPF_JEQ, R4, 92, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1903) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1904) BPF_MOV64_IMM(R4, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1905) BPF_ALU64_REG(BPF_LSH, R4, R4), /* R4 = 4 << 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1906) BPF_JMP_IMM(BPF_JEQ, R4, 64, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1907) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1908) BPF_MOV64_IMM(R4, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1909) BPF_ALU32_REG(BPF_LSH, R4, R4), /* R4 = 5 << 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1910) BPF_JMP_IMM(BPF_JEQ, R4, 160, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1911) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1912) BPF_MOV64_IMM(R0, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1913) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1914) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1915) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1916) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1917) { { 0, -1 } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1918) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1919) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1920) "check: missing ret",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1921) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1922) BPF_STMT(BPF_LD | BPF_IMM, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1923) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1924) CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1925) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1926) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1927) .fill_helper = NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1928) .expected_errcode = -EINVAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1929) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1930) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1931) "check: div_k_0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1932) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1933) BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1934) BPF_STMT(BPF_RET | BPF_K, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1935) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1936) CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1937) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1938) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1939) .fill_helper = NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1940) .expected_errcode = -EINVAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1941) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1942) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1943) "check: unknown insn",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1944) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1945) /* seccomp insn, rejected in socket filter */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1946) BPF_STMT(BPF_LDX | BPF_W | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1947) BPF_STMT(BPF_RET | BPF_K, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1948) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1949) CLASSIC | FLAG_EXPECTED_FAIL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1950) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1951) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1952) .fill_helper = NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1953) .expected_errcode = -EINVAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1954) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1955) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1956) "check: out of range spill/fill",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1957) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1958) BPF_STMT(BPF_STX, 16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1959) BPF_STMT(BPF_RET | BPF_K, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1960) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1961) CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1962) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1963) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1964) .fill_helper = NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1965) .expected_errcode = -EINVAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1966) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1967) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1968) "JUMPS + HOLES",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1969) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1970) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1971) BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1972) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1973) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1974) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1975) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1976) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1977) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1978) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1979) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1980) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1981) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1982) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1983) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1984) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1985) BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90c2894d, 3, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1986) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1987) BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90c2894d, 1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1988) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1989) BPF_JUMP(BPF_JMP | BPF_JGE, 0, 14, 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1990) BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1991) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1992) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1993) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1994) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1995) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1996) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1997) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1998) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1999) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2000) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2001) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2002) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2003) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2004) BPF_JUMP(BPF_JMP | BPF_JEQ, 0x2ac28349, 2, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2005) BPF_JUMP(BPF_JMP | BPF_JEQ, 0x2ac28349, 1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2006) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2007) BPF_JUMP(BPF_JMP | BPF_JGE, 0, 14, 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2008) BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2009) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2010) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2011) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2012) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2013) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2014) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2015) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2016) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2017) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2018) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2019) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2020) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2021) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2022) BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90d2ff41, 2, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2023) BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90d2ff41, 1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2024) BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2025) BPF_STMT(BPF_RET | BPF_A, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2026) BPF_STMT(BPF_RET | BPF_A, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2027) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2028) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2029) { 0x00, 0x1b, 0x21, 0x3c, 0x9d, 0xf8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2030) 0x90, 0xe2, 0xba, 0x0a, 0x56, 0xb4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2031) 0x08, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2032) 0x45, 0x00, 0x00, 0x28, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2033) 0x20, 0x00, 0x40, 0x11, 0x00, 0x00, /* IP header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2034) 0xc0, 0xa8, 0x33, 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2035) 0xc0, 0xa8, 0x33, 0x02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2036) 0xbb, 0xb6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2037) 0xa9, 0xfa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2038) 0x00, 0x14, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2039) 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2040) 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2041) 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2042) 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2043) 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2044) 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2045) 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2046) 0xcc, 0xcc, 0xcc, 0xcc },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2047) { { 88, 0x001b } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2048) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2049) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2050) "check: RET X",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2051) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2052) BPF_STMT(BPF_RET | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2053) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2054) CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2055) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2056) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2057) .fill_helper = NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2058) .expected_errcode = -EINVAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2059) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2060) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2061) "check: LDX + RET X",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2062) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2063) BPF_STMT(BPF_LDX | BPF_IMM, 42),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2064) BPF_STMT(BPF_RET | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2065) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2066) CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2067) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2068) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2069) .fill_helper = NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2070) .expected_errcode = -EINVAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2071) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2072) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2073) "M[]: alt STX + LDX",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2074) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2075) BPF_STMT(BPF_LDX | BPF_IMM, 100),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2076) BPF_STMT(BPF_STX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2077) BPF_STMT(BPF_LDX | BPF_MEM, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2078) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2079) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2080) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2081) BPF_STMT(BPF_STX, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2082) BPF_STMT(BPF_LDX | BPF_MEM, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2083) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2084) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2085) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2086) BPF_STMT(BPF_STX, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2087) BPF_STMT(BPF_LDX | BPF_MEM, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2088) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2089) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2090) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2091) BPF_STMT(BPF_STX, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2092) BPF_STMT(BPF_LDX | BPF_MEM, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2093) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2094) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2095) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2096) BPF_STMT(BPF_STX, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2097) BPF_STMT(BPF_LDX | BPF_MEM, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2098) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2099) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2100) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2101) BPF_STMT(BPF_STX, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2102) BPF_STMT(BPF_LDX | BPF_MEM, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2103) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2104) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2105) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2106) BPF_STMT(BPF_STX, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2107) BPF_STMT(BPF_LDX | BPF_MEM, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2108) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2109) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2110) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2111) BPF_STMT(BPF_STX, 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2112) BPF_STMT(BPF_LDX | BPF_MEM, 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2113) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2114) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2115) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2116) BPF_STMT(BPF_STX, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2117) BPF_STMT(BPF_LDX | BPF_MEM, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2118) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2119) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2120) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2121) BPF_STMT(BPF_STX, 9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2122) BPF_STMT(BPF_LDX | BPF_MEM, 9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2123) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2124) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2125) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2126) BPF_STMT(BPF_STX, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2127) BPF_STMT(BPF_LDX | BPF_MEM, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2128) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2129) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2130) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2131) BPF_STMT(BPF_STX, 11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2132) BPF_STMT(BPF_LDX | BPF_MEM, 11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2133) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2134) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2135) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2136) BPF_STMT(BPF_STX, 12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2137) BPF_STMT(BPF_LDX | BPF_MEM, 12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2138) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2139) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2140) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2141) BPF_STMT(BPF_STX, 13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2142) BPF_STMT(BPF_LDX | BPF_MEM, 13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2143) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2144) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2145) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2146) BPF_STMT(BPF_STX, 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2147) BPF_STMT(BPF_LDX | BPF_MEM, 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2148) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2149) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2150) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2151) BPF_STMT(BPF_STX, 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2152) BPF_STMT(BPF_LDX | BPF_MEM, 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2153) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2154) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2155) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2156) BPF_STMT(BPF_RET | BPF_A, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2157) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2158) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2159) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2160) { { 0, 116 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2161) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2162) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2163) "M[]: full STX + full LDX",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2164) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2165) BPF_STMT(BPF_LDX | BPF_IMM, 0xbadfeedb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2166) BPF_STMT(BPF_STX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2167) BPF_STMT(BPF_LDX | BPF_IMM, 0xecabedae),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2168) BPF_STMT(BPF_STX, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2169) BPF_STMT(BPF_LDX | BPF_IMM, 0xafccfeaf),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2170) BPF_STMT(BPF_STX, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2171) BPF_STMT(BPF_LDX | BPF_IMM, 0xbffdcedc),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2172) BPF_STMT(BPF_STX, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2173) BPF_STMT(BPF_LDX | BPF_IMM, 0xfbbbdccb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2174) BPF_STMT(BPF_STX, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2175) BPF_STMT(BPF_LDX | BPF_IMM, 0xfbabcbda),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2176) BPF_STMT(BPF_STX, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2177) BPF_STMT(BPF_LDX | BPF_IMM, 0xaedecbdb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2178) BPF_STMT(BPF_STX, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2179) BPF_STMT(BPF_LDX | BPF_IMM, 0xadebbade),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2180) BPF_STMT(BPF_STX, 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2181) BPF_STMT(BPF_LDX | BPF_IMM, 0xfcfcfaec),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2182) BPF_STMT(BPF_STX, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2183) BPF_STMT(BPF_LDX | BPF_IMM, 0xbcdddbdc),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2184) BPF_STMT(BPF_STX, 9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2185) BPF_STMT(BPF_LDX | BPF_IMM, 0xfeefdfac),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2186) BPF_STMT(BPF_STX, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2187) BPF_STMT(BPF_LDX | BPF_IMM, 0xcddcdeea),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2188) BPF_STMT(BPF_STX, 11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2189) BPF_STMT(BPF_LDX | BPF_IMM, 0xaccfaebb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2190) BPF_STMT(BPF_STX, 12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2191) BPF_STMT(BPF_LDX | BPF_IMM, 0xbdcccdcf),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2192) BPF_STMT(BPF_STX, 13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2193) BPF_STMT(BPF_LDX | BPF_IMM, 0xaaedecde),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2194) BPF_STMT(BPF_STX, 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2195) BPF_STMT(BPF_LDX | BPF_IMM, 0xfaeacdad),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2196) BPF_STMT(BPF_STX, 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2197) BPF_STMT(BPF_LDX | BPF_MEM, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2198) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2199) BPF_STMT(BPF_LDX | BPF_MEM, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2200) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2201) BPF_STMT(BPF_LDX | BPF_MEM, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2202) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2203) BPF_STMT(BPF_LDX | BPF_MEM, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2204) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2205) BPF_STMT(BPF_LDX | BPF_MEM, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2206) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2207) BPF_STMT(BPF_LDX | BPF_MEM, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2208) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2209) BPF_STMT(BPF_LDX | BPF_MEM, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2210) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2211) BPF_STMT(BPF_LDX | BPF_MEM, 7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2212) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2213) BPF_STMT(BPF_LDX | BPF_MEM, 8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2214) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2215) BPF_STMT(BPF_LDX | BPF_MEM, 9),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2216) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2217) BPF_STMT(BPF_LDX | BPF_MEM, 10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2218) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2219) BPF_STMT(BPF_LDX | BPF_MEM, 11),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2220) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2221) BPF_STMT(BPF_LDX | BPF_MEM, 12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2222) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2223) BPF_STMT(BPF_LDX | BPF_MEM, 13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2224) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2225) BPF_STMT(BPF_LDX | BPF_MEM, 14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2226) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2227) BPF_STMT(BPF_LDX | BPF_MEM, 15),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2228) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2229) BPF_STMT(BPF_RET | BPF_A, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2230) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2231) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2232) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2233) { { 0, 0x2a5a5e5 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2234) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2235) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2236) "check: SKF_AD_MAX",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2237) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2238) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2239) SKF_AD_OFF + SKF_AD_MAX),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2240) BPF_STMT(BPF_RET | BPF_A, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2241) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2242) CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2243) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2244) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2245) .fill_helper = NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2246) .expected_errcode = -EINVAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2247) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2248) { /* Passes checker but fails during runtime. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2249) "LD [SKF_AD_OFF-1]",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2250) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2251) BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2252) SKF_AD_OFF - 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2253) BPF_STMT(BPF_RET | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2254) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2255) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2256) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2257) { { 1, 0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2258) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2259) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2260) "load 64-bit immediate",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2261) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2262) BPF_LD_IMM64(R1, 0x567800001234LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2263) BPF_MOV64_REG(R2, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2264) BPF_MOV64_REG(R3, R2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2265) BPF_ALU64_IMM(BPF_RSH, R2, 32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2266) BPF_ALU64_IMM(BPF_LSH, R3, 32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2267) BPF_ALU64_IMM(BPF_RSH, R3, 32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2268) BPF_ALU64_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2269) BPF_JMP_IMM(BPF_JEQ, R2, 0x5678, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2270) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2271) BPF_JMP_IMM(BPF_JEQ, R3, 0x1234, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2272) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2273) BPF_LD_IMM64(R0, 0x1ffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2274) BPF_ALU64_IMM(BPF_RSH, R0, 32), /* R0 = 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2275) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2276) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2277) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2278) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2279) { { 0, 1 } }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2280) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2281) /* BPF_ALU | BPF_MOV | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2282) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2283) "ALU_MOV_X: dst = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2284) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2285) BPF_ALU32_IMM(BPF_MOV, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2286) BPF_ALU32_REG(BPF_MOV, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2287) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2288) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2289) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2290) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2291) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2292) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2293) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2294) "ALU_MOV_X: dst = 4294967295",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2295) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2296) BPF_ALU32_IMM(BPF_MOV, R1, 4294967295U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2297) BPF_ALU32_REG(BPF_MOV, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2298) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2299) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2300) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2301) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2302) { { 0, 4294967295U } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2303) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2304) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2305) "ALU64_MOV_X: dst = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2306) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2307) BPF_ALU32_IMM(BPF_MOV, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2308) BPF_ALU64_REG(BPF_MOV, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2309) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2310) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2311) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2312) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2313) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2314) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2315) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2316) "ALU64_MOV_X: dst = 4294967295",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2317) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2318) BPF_ALU32_IMM(BPF_MOV, R1, 4294967295U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2319) BPF_ALU64_REG(BPF_MOV, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2320) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2321) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2322) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2323) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2324) { { 0, 4294967295U } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2325) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2326) /* BPF_ALU | BPF_MOV | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2327) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2328) "ALU_MOV_K: dst = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2329) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2330) BPF_ALU32_IMM(BPF_MOV, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2331) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2332) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2333) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2334) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2335) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2336) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2337) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2338) "ALU_MOV_K: dst = 4294967295",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2339) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2340) BPF_ALU32_IMM(BPF_MOV, R0, 4294967295U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2341) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2342) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2343) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2344) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2345) { { 0, 4294967295U } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2346) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2347) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2348) "ALU_MOV_K: 0x0000ffffffff0000 = 0x00000000ffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2349) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2350) BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2351) BPF_LD_IMM64(R3, 0x00000000ffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2352) BPF_ALU32_IMM(BPF_MOV, R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2353) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2354) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2355) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2356) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2357) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2358) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2359) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2360) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2361) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2362) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2363) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2364) "ALU64_MOV_K: dst = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2365) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2366) BPF_ALU64_IMM(BPF_MOV, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2367) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2368) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2369) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2370) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2371) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2372) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2373) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2374) "ALU64_MOV_K: dst = 2147483647",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2375) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2376) BPF_ALU64_IMM(BPF_MOV, R0, 2147483647),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2377) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2378) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2379) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2380) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2381) { { 0, 2147483647 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2382) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2383) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2384) "ALU64_OR_K: dst = 0x0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2385) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2386) BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2387) BPF_LD_IMM64(R3, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2388) BPF_ALU64_IMM(BPF_MOV, R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2389) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2390) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2391) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2392) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2393) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2394) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2395) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2396) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2397) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2398) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2399) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2400) "ALU64_MOV_K: dst = -1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2401) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2402) BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2403) BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2404) BPF_ALU64_IMM(BPF_MOV, R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2405) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2406) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2407) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2408) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2409) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2410) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2411) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2412) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2413) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2414) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2415) /* BPF_ALU | BPF_ADD | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2416) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2417) "ALU_ADD_X: 1 + 2 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2418) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2419) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2420) BPF_ALU32_IMM(BPF_MOV, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2421) BPF_ALU32_REG(BPF_ADD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2422) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2423) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2424) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2425) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2426) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2427) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2428) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2429) "ALU_ADD_X: 1 + 4294967294 = 4294967295",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2430) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2431) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2432) BPF_ALU32_IMM(BPF_MOV, R1, 4294967294U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2433) BPF_ALU32_REG(BPF_ADD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2434) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2435) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2436) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2437) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2438) { { 0, 4294967295U } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2439) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2440) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2441) "ALU_ADD_X: 2 + 4294967294 = 0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2442) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2443) BPF_LD_IMM64(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2444) BPF_LD_IMM64(R1, 4294967294U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2445) BPF_ALU32_REG(BPF_ADD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2446) BPF_JMP_IMM(BPF_JEQ, R0, 0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2447) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2448) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2449) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2450) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2451) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2452) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2453) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2454) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2455) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2456) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2457) "ALU64_ADD_X: 1 + 2 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2458) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2459) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2460) BPF_ALU32_IMM(BPF_MOV, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2461) BPF_ALU64_REG(BPF_ADD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2462) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2463) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2464) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2465) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2466) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2467) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2468) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2469) "ALU64_ADD_X: 1 + 4294967294 = 4294967295",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2470) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2471) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2472) BPF_ALU32_IMM(BPF_MOV, R1, 4294967294U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2473) BPF_ALU64_REG(BPF_ADD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2474) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2475) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2476) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2477) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2478) { { 0, 4294967295U } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2479) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2480) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2481) "ALU64_ADD_X: 2 + 4294967294 = 4294967296",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2482) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2483) BPF_LD_IMM64(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2484) BPF_LD_IMM64(R1, 4294967294U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2485) BPF_LD_IMM64(R2, 4294967296ULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2486) BPF_ALU64_REG(BPF_ADD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2487) BPF_JMP_REG(BPF_JEQ, R0, R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2488) BPF_MOV32_IMM(R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2489) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2490) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2491) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2492) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2493) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2494) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2495) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2496) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2497) /* BPF_ALU | BPF_ADD | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2498) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2499) "ALU_ADD_K: 1 + 2 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2500) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2501) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2502) BPF_ALU32_IMM(BPF_ADD, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2503) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2504) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2505) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2506) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2507) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2508) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2509) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2510) "ALU_ADD_K: 3 + 0 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2511) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2512) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2513) BPF_ALU32_IMM(BPF_ADD, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2514) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2515) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2516) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2517) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2518) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2519) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2520) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2521) "ALU_ADD_K: 1 + 4294967294 = 4294967295",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2522) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2523) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2524) BPF_ALU32_IMM(BPF_ADD, R0, 4294967294U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2525) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2526) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2527) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2528) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2529) { { 0, 4294967295U } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2530) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2531) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2532) "ALU_ADD_K: 4294967294 + 2 = 0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2533) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2534) BPF_LD_IMM64(R0, 4294967294U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2535) BPF_ALU32_IMM(BPF_ADD, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2536) BPF_JMP_IMM(BPF_JEQ, R0, 0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2537) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2538) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2539) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2540) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2541) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2542) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2543) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2544) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2545) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2546) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2547) "ALU_ADD_K: 0 + (-1) = 0x00000000ffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2548) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2549) BPF_LD_IMM64(R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2550) BPF_LD_IMM64(R3, 0x00000000ffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2551) BPF_ALU32_IMM(BPF_ADD, R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2552) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2553) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2554) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2555) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2556) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2557) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2558) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2559) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2560) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2561) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2562) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2563) "ALU_ADD_K: 0 + 0xffff = 0xffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2564) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2565) BPF_LD_IMM64(R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2566) BPF_LD_IMM64(R3, 0xffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2567) BPF_ALU32_IMM(BPF_ADD, R2, 0xffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2568) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2569) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2570) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2571) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2572) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2573) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2574) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2575) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2576) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2577) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2578) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2579) "ALU_ADD_K: 0 + 0x7fffffff = 0x7fffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2580) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2581) BPF_LD_IMM64(R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2582) BPF_LD_IMM64(R3, 0x7fffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2583) BPF_ALU32_IMM(BPF_ADD, R2, 0x7fffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2584) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2585) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2586) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2587) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2588) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2589) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2590) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2591) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2592) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2593) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2594) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2595) "ALU_ADD_K: 0 + 0x80000000 = 0x80000000",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2596) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2597) BPF_LD_IMM64(R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2598) BPF_LD_IMM64(R3, 0x80000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2599) BPF_ALU32_IMM(BPF_ADD, R2, 0x80000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2600) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2601) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2602) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2603) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2604) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2605) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2606) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2607) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2608) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2609) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2610) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2611) "ALU_ADD_K: 0 + 0x80008000 = 0x80008000",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2612) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2613) BPF_LD_IMM64(R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2614) BPF_LD_IMM64(R3, 0x80008000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2615) BPF_ALU32_IMM(BPF_ADD, R2, 0x80008000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2616) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2617) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2618) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2619) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2620) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2621) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2622) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2623) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2624) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2625) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2626) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2627) "ALU64_ADD_K: 1 + 2 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2628) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2629) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2630) BPF_ALU64_IMM(BPF_ADD, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2631) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2632) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2633) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2634) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2635) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2636) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2637) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2638) "ALU64_ADD_K: 3 + 0 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2639) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2640) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2641) BPF_ALU64_IMM(BPF_ADD, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2642) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2643) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2644) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2645) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2646) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2647) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2648) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2649) "ALU64_ADD_K: 1 + 2147483646 = 2147483647",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2650) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2651) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2652) BPF_ALU64_IMM(BPF_ADD, R0, 2147483646),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2653) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2654) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2655) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2656) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2657) { { 0, 2147483647 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2658) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2659) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2660) "ALU64_ADD_K: 4294967294 + 2 = 4294967296",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2661) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2662) BPF_LD_IMM64(R0, 4294967294U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2663) BPF_LD_IMM64(R1, 4294967296ULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2664) BPF_ALU64_IMM(BPF_ADD, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2665) BPF_JMP_REG(BPF_JEQ, R0, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2666) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2667) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2668) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2669) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2670) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2671) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2672) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2673) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2674) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2675) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2676) "ALU64_ADD_K: 2147483646 + -2147483647 = -1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2677) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2678) BPF_LD_IMM64(R0, 2147483646),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2679) BPF_ALU64_IMM(BPF_ADD, R0, -2147483647),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2680) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2681) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2682) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2683) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2684) { { 0, -1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2685) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2686) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2687) "ALU64_ADD_K: 1 + 0 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2688) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2689) BPF_LD_IMM64(R2, 0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2690) BPF_LD_IMM64(R3, 0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2691) BPF_ALU64_IMM(BPF_ADD, R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2692) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2693) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2694) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2695) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2696) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2697) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2698) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2699) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2700) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2701) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2702) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2703) "ALU64_ADD_K: 0 + (-1) = 0xffffffffffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2704) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2705) BPF_LD_IMM64(R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2706) BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2707) BPF_ALU64_IMM(BPF_ADD, R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2708) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2709) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2710) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2711) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2712) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2713) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2714) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2715) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2716) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2717) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2718) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2719) "ALU64_ADD_K: 0 + 0xffff = 0xffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2720) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2721) BPF_LD_IMM64(R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2722) BPF_LD_IMM64(R3, 0xffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2723) BPF_ALU64_IMM(BPF_ADD, R2, 0xffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2724) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2725) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2726) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2727) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2728) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2729) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2730) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2731) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2732) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2733) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2734) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2735) "ALU64_ADD_K: 0 + 0x7fffffff = 0x7fffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2736) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2737) BPF_LD_IMM64(R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2738) BPF_LD_IMM64(R3, 0x7fffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2739) BPF_ALU64_IMM(BPF_ADD, R2, 0x7fffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2740) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2741) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2742) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2743) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2744) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2745) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2746) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2747) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2748) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2749) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2750) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2751) "ALU64_ADD_K: 0 + 0x80000000 = 0xffffffff80000000",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2752) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2753) BPF_LD_IMM64(R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2754) BPF_LD_IMM64(R3, 0xffffffff80000000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2755) BPF_ALU64_IMM(BPF_ADD, R2, 0x80000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2756) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2757) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2758) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2759) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2760) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2761) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2762) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2763) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2764) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2765) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2766) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2767) "ALU_ADD_K: 0 + 0x80008000 = 0xffffffff80008000",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2768) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2769) BPF_LD_IMM64(R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2770) BPF_LD_IMM64(R3, 0xffffffff80008000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2771) BPF_ALU64_IMM(BPF_ADD, R2, 0x80008000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2772) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2773) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2774) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2775) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2776) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2777) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2778) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2779) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2780) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2781) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2782) /* BPF_ALU | BPF_SUB | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2783) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2784) "ALU_SUB_X: 3 - 1 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2785) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2786) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2787) BPF_ALU32_IMM(BPF_MOV, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2788) BPF_ALU32_REG(BPF_SUB, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2789) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2790) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2791) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2792) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2793) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2794) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2795) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2796) "ALU_SUB_X: 4294967295 - 4294967294 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2797) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2798) BPF_LD_IMM64(R0, 4294967295U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2799) BPF_ALU32_IMM(BPF_MOV, R1, 4294967294U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2800) BPF_ALU32_REG(BPF_SUB, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2801) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2802) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2803) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2804) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2805) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2806) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2807) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2808) "ALU64_SUB_X: 3 - 1 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2809) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2810) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2811) BPF_ALU32_IMM(BPF_MOV, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2812) BPF_ALU64_REG(BPF_SUB, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2813) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2814) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2815) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2816) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2817) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2818) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2819) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2820) "ALU64_SUB_X: 4294967295 - 4294967294 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2821) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2822) BPF_LD_IMM64(R0, 4294967295U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2823) BPF_ALU32_IMM(BPF_MOV, R1, 4294967294U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2824) BPF_ALU64_REG(BPF_SUB, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2825) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2826) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2827) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2828) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2829) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2830) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2831) /* BPF_ALU | BPF_SUB | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2832) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2833) "ALU_SUB_K: 3 - 1 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2834) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2835) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2836) BPF_ALU32_IMM(BPF_SUB, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2837) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2838) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2839) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2840) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2841) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2842) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2843) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2844) "ALU_SUB_K: 3 - 0 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2845) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2846) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2847) BPF_ALU32_IMM(BPF_SUB, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2848) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2849) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2850) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2851) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2852) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2853) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2854) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2855) "ALU_SUB_K: 4294967295 - 4294967294 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2856) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2857) BPF_LD_IMM64(R0, 4294967295U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2858) BPF_ALU32_IMM(BPF_SUB, R0, 4294967294U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2859) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2860) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2861) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2862) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2863) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2864) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2865) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2866) "ALU64_SUB_K: 3 - 1 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2867) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2868) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2869) BPF_ALU64_IMM(BPF_SUB, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2870) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2871) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2872) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2873) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2874) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2875) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2876) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2877) "ALU64_SUB_K: 3 - 0 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2878) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2879) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2880) BPF_ALU64_IMM(BPF_SUB, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2881) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2882) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2883) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2884) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2885) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2886) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2887) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2888) "ALU64_SUB_K: 4294967294 - 4294967295 = -1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2889) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2890) BPF_LD_IMM64(R0, 4294967294U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2891) BPF_ALU64_IMM(BPF_SUB, R0, 4294967295U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2892) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2893) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2894) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2895) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2896) { { 0, -1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2897) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2898) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2899) "ALU64_ADD_K: 2147483646 - 2147483647 = -1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2900) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2901) BPF_LD_IMM64(R0, 2147483646),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2902) BPF_ALU64_IMM(BPF_SUB, R0, 2147483647),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2903) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2904) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2905) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2906) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2907) { { 0, -1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2908) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2909) /* BPF_ALU | BPF_MUL | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2910) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2911) "ALU_MUL_X: 2 * 3 = 6",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2912) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2913) BPF_LD_IMM64(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2914) BPF_ALU32_IMM(BPF_MOV, R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2915) BPF_ALU32_REG(BPF_MUL, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2916) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2917) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2918) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2919) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2920) { { 0, 6 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2921) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2922) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2923) "ALU_MUL_X: 2 * 0x7FFFFFF8 = 0xFFFFFFF0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2924) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2925) BPF_LD_IMM64(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2926) BPF_ALU32_IMM(BPF_MOV, R1, 0x7FFFFFF8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2927) BPF_ALU32_REG(BPF_MUL, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2928) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2929) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2930) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2931) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2932) { { 0, 0xFFFFFFF0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2933) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2934) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2935) "ALU_MUL_X: -1 * -1 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2936) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2937) BPF_LD_IMM64(R0, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2938) BPF_ALU32_IMM(BPF_MOV, R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2939) BPF_ALU32_REG(BPF_MUL, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2940) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2941) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2942) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2943) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2944) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2945) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2946) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2947) "ALU64_MUL_X: 2 * 3 = 6",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2948) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2949) BPF_LD_IMM64(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2950) BPF_ALU32_IMM(BPF_MOV, R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2951) BPF_ALU64_REG(BPF_MUL, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2952) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2953) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2954) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2955) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2956) { { 0, 6 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2957) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2958) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2959) "ALU64_MUL_X: 1 * 2147483647 = 2147483647",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2960) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2961) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2962) BPF_ALU32_IMM(BPF_MOV, R1, 2147483647),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2963) BPF_ALU64_REG(BPF_MUL, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2964) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2965) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2966) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2967) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2968) { { 0, 2147483647 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2969) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2970) /* BPF_ALU | BPF_MUL | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2971) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2972) "ALU_MUL_K: 2 * 3 = 6",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2973) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2974) BPF_LD_IMM64(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2975) BPF_ALU32_IMM(BPF_MUL, R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2976) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2977) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2978) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2979) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2980) { { 0, 6 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2981) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2982) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2983) "ALU_MUL_K: 3 * 1 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2984) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2985) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2986) BPF_ALU32_IMM(BPF_MUL, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2987) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2988) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2989) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2990) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2991) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2992) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2993) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2994) "ALU_MUL_K: 2 * 0x7FFFFFF8 = 0xFFFFFFF0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2995) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2996) BPF_LD_IMM64(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2997) BPF_ALU32_IMM(BPF_MUL, R0, 0x7FFFFFF8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2998) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2999) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3000) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3001) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3002) { { 0, 0xFFFFFFF0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3003) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3004) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3005) "ALU_MUL_K: 1 * (-1) = 0x00000000ffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3006) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3007) BPF_LD_IMM64(R2, 0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3008) BPF_LD_IMM64(R3, 0x00000000ffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3009) BPF_ALU32_IMM(BPF_MUL, R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3010) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3011) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3012) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3013) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3014) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3015) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3016) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3017) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3018) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3019) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3020) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3021) "ALU64_MUL_K: 2 * 3 = 6",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3022) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3023) BPF_LD_IMM64(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3024) BPF_ALU64_IMM(BPF_MUL, R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3025) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3026) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3027) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3028) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3029) { { 0, 6 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3030) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3031) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3032) "ALU64_MUL_K: 3 * 1 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3033) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3034) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3035) BPF_ALU64_IMM(BPF_MUL, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3036) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3037) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3038) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3039) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3040) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3041) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3042) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3043) "ALU64_MUL_K: 1 * 2147483647 = 2147483647",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3044) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3045) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3046) BPF_ALU64_IMM(BPF_MUL, R0, 2147483647),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3047) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3048) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3049) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3050) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3051) { { 0, 2147483647 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3052) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3053) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3054) "ALU64_MUL_K: 1 * -2147483647 = -2147483647",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3055) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3056) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3057) BPF_ALU64_IMM(BPF_MUL, R0, -2147483647),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3058) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3059) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3060) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3061) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3062) { { 0, -2147483647 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3063) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3064) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3065) "ALU64_MUL_K: 1 * (-1) = 0xffffffffffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3066) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3067) BPF_LD_IMM64(R2, 0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3068) BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3069) BPF_ALU64_IMM(BPF_MUL, R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3070) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3071) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3072) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3073) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3074) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3075) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3076) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3077) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3078) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3079) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3080) /* BPF_ALU | BPF_DIV | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3081) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3082) "ALU_DIV_X: 6 / 2 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3083) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3084) BPF_LD_IMM64(R0, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3085) BPF_ALU32_IMM(BPF_MOV, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3086) BPF_ALU32_REG(BPF_DIV, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3087) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3088) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3089) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3090) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3091) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3092) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3093) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3094) "ALU_DIV_X: 4294967295 / 4294967295 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3095) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3096) BPF_LD_IMM64(R0, 4294967295U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3097) BPF_ALU32_IMM(BPF_MOV, R1, 4294967295U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3098) BPF_ALU32_REG(BPF_DIV, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3099) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3100) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3101) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3102) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3103) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3104) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3105) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3106) "ALU64_DIV_X: 6 / 2 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3107) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3108) BPF_LD_IMM64(R0, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3109) BPF_ALU32_IMM(BPF_MOV, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3110) BPF_ALU64_REG(BPF_DIV, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3111) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3112) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3113) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3114) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3115) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3116) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3117) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3118) "ALU64_DIV_X: 2147483647 / 2147483647 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3119) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3120) BPF_LD_IMM64(R0, 2147483647),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3121) BPF_ALU32_IMM(BPF_MOV, R1, 2147483647),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3122) BPF_ALU64_REG(BPF_DIV, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3123) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3124) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3125) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3126) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3127) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3128) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3129) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3130) "ALU64_DIV_X: 0xffffffffffffffff / (-1) = 0x0000000000000001",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3131) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3132) BPF_LD_IMM64(R2, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3133) BPF_LD_IMM64(R4, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3134) BPF_LD_IMM64(R3, 0x0000000000000001LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3135) BPF_ALU64_REG(BPF_DIV, R2, R4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3136) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3137) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3138) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3139) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3140) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3141) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3142) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3143) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3144) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3145) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3146) /* BPF_ALU | BPF_DIV | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3147) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3148) "ALU_DIV_K: 6 / 2 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3149) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3150) BPF_LD_IMM64(R0, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3151) BPF_ALU32_IMM(BPF_DIV, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3152) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3153) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3154) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3155) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3156) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3157) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3158) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3159) "ALU_DIV_K: 3 / 1 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3160) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3161) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3162) BPF_ALU32_IMM(BPF_DIV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3163) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3164) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3165) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3166) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3167) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3168) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3169) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3170) "ALU_DIV_K: 4294967295 / 4294967295 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3171) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3172) BPF_LD_IMM64(R0, 4294967295U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3173) BPF_ALU32_IMM(BPF_DIV, R0, 4294967295U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3174) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3175) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3176) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3177) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3178) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3179) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3180) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3181) "ALU_DIV_K: 0xffffffffffffffff / (-1) = 0x1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3182) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3183) BPF_LD_IMM64(R2, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3184) BPF_LD_IMM64(R3, 0x1UL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3185) BPF_ALU32_IMM(BPF_DIV, R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3186) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3187) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3188) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3189) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3190) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3191) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3192) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3193) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3194) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3195) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3196) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3197) "ALU64_DIV_K: 6 / 2 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3198) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3199) BPF_LD_IMM64(R0, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3200) BPF_ALU64_IMM(BPF_DIV, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3201) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3202) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3203) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3204) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3205) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3206) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3207) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3208) "ALU64_DIV_K: 3 / 1 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3209) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3210) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3211) BPF_ALU64_IMM(BPF_DIV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3212) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3213) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3214) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3215) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3216) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3217) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3218) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3219) "ALU64_DIV_K: 2147483647 / 2147483647 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3220) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3221) BPF_LD_IMM64(R0, 2147483647),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3222) BPF_ALU64_IMM(BPF_DIV, R0, 2147483647),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3223) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3224) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3225) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3226) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3227) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3228) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3229) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3230) "ALU64_DIV_K: 0xffffffffffffffff / (-1) = 0x0000000000000001",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3231) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3232) BPF_LD_IMM64(R2, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3233) BPF_LD_IMM64(R3, 0x0000000000000001LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3234) BPF_ALU64_IMM(BPF_DIV, R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3235) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3236) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3237) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3238) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3239) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3240) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3241) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3242) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3243) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3244) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3245) /* BPF_ALU | BPF_MOD | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3246) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3247) "ALU_MOD_X: 3 % 2 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3248) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3249) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3250) BPF_ALU32_IMM(BPF_MOV, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3251) BPF_ALU32_REG(BPF_MOD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3252) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3253) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3254) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3255) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3256) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3257) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3258) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3259) "ALU_MOD_X: 4294967295 % 4294967293 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3260) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3261) BPF_LD_IMM64(R0, 4294967295U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3262) BPF_ALU32_IMM(BPF_MOV, R1, 4294967293U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3263) BPF_ALU32_REG(BPF_MOD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3264) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3265) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3266) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3267) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3268) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3269) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3270) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3271) "ALU64_MOD_X: 3 % 2 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3272) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3273) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3274) BPF_ALU32_IMM(BPF_MOV, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3275) BPF_ALU64_REG(BPF_MOD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3276) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3277) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3278) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3279) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3280) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3281) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3282) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3283) "ALU64_MOD_X: 2147483647 % 2147483645 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3284) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3285) BPF_LD_IMM64(R0, 2147483647),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3286) BPF_ALU32_IMM(BPF_MOV, R1, 2147483645),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3287) BPF_ALU64_REG(BPF_MOD, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3288) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3289) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3290) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3291) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3292) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3293) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3294) /* BPF_ALU | BPF_MOD | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3295) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3296) "ALU_MOD_K: 3 % 2 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3297) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3298) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3299) BPF_ALU32_IMM(BPF_MOD, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3300) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3301) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3302) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3303) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3304) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3305) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3306) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3307) "ALU_MOD_K: 3 % 1 = 0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3308) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3309) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3310) BPF_ALU32_IMM(BPF_MOD, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3311) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3312) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3313) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3314) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3315) { { 0, 0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3316) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3317) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3318) "ALU_MOD_K: 4294967295 % 4294967293 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3319) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3320) BPF_LD_IMM64(R0, 4294967295U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3321) BPF_ALU32_IMM(BPF_MOD, R0, 4294967293U),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3322) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3323) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3324) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3325) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3326) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3327) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3328) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3329) "ALU64_MOD_K: 3 % 2 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3330) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3331) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3332) BPF_ALU64_IMM(BPF_MOD, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3333) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3334) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3335) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3336) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3337) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3338) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3339) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3340) "ALU64_MOD_K: 3 % 1 = 0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3341) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3342) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3343) BPF_ALU64_IMM(BPF_MOD, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3344) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3345) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3346) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3347) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3348) { { 0, 0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3349) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3350) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3351) "ALU64_MOD_K: 2147483647 % 2147483645 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3352) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3353) BPF_LD_IMM64(R0, 2147483647),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3354) BPF_ALU64_IMM(BPF_MOD, R0, 2147483645),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3355) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3356) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3357) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3358) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3359) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3360) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3361) /* BPF_ALU | BPF_AND | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3362) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3363) "ALU_AND_X: 3 & 2 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3364) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3365) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3366) BPF_ALU32_IMM(BPF_MOV, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3367) BPF_ALU32_REG(BPF_AND, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3368) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3369) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3370) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3371) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3372) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3373) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3374) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3375) "ALU_AND_X: 0xffffffff & 0xffffffff = 0xffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3376) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3377) BPF_LD_IMM64(R0, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3378) BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3379) BPF_ALU32_REG(BPF_AND, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3380) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3381) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3382) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3383) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3384) { { 0, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3385) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3386) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3387) "ALU64_AND_X: 3 & 2 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3388) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3389) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3390) BPF_ALU32_IMM(BPF_MOV, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3391) BPF_ALU64_REG(BPF_AND, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3392) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3393) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3394) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3395) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3396) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3397) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3398) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3399) "ALU64_AND_X: 0xffffffff & 0xffffffff = 0xffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3400) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3401) BPF_LD_IMM64(R0, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3402) BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3403) BPF_ALU64_REG(BPF_AND, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3404) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3405) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3406) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3407) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3408) { { 0, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3409) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3410) /* BPF_ALU | BPF_AND | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3411) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3412) "ALU_AND_K: 3 & 2 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3413) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3414) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3415) BPF_ALU32_IMM(BPF_AND, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3416) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3417) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3418) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3419) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3420) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3421) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3422) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3423) "ALU_AND_K: 0xffffffff & 0xffffffff = 0xffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3424) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3425) BPF_LD_IMM64(R0, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3426) BPF_ALU32_IMM(BPF_AND, R0, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3427) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3428) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3429) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3430) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3431) { { 0, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3432) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3433) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3434) "ALU64_AND_K: 3 & 2 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3435) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3436) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3437) BPF_ALU64_IMM(BPF_AND, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3438) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3439) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3440) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3441) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3442) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3443) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3444) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3445) "ALU64_AND_K: 0xffffffff & 0xffffffff = 0xffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3446) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3447) BPF_LD_IMM64(R0, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3448) BPF_ALU64_IMM(BPF_AND, R0, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3449) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3450) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3451) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3452) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3453) { { 0, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3454) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3455) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3456) "ALU64_AND_K: 0x0000ffffffff0000 & 0x0 = 0x0000ffff00000000",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3457) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3458) BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3459) BPF_LD_IMM64(R3, 0x0000000000000000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3460) BPF_ALU64_IMM(BPF_AND, R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3461) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3462) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3463) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3464) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3465) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3466) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3467) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3468) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3469) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3470) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3471) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3472) "ALU64_AND_K: 0x0000ffffffff0000 & -1 = 0x0000ffffffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3473) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3474) BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3475) BPF_LD_IMM64(R3, 0x0000ffffffff0000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3476) BPF_ALU64_IMM(BPF_AND, R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3477) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3478) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3479) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3480) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3481) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3482) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3483) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3484) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3485) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3486) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3487) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3488) "ALU64_AND_K: 0xffffffffffffffff & -1 = 0xffffffffffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3489) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3490) BPF_LD_IMM64(R2, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3491) BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3492) BPF_ALU64_IMM(BPF_AND, R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3493) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3494) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3495) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3496) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3497) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3498) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3499) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3500) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3501) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3502) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3503) /* BPF_ALU | BPF_OR | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3504) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3505) "ALU_OR_X: 1 | 2 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3506) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3507) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3508) BPF_ALU32_IMM(BPF_MOV, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3509) BPF_ALU32_REG(BPF_OR, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3510) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3511) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3512) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3513) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3514) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3515) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3516) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3517) "ALU_OR_X: 0x0 | 0xffffffff = 0xffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3518) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3519) BPF_LD_IMM64(R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3520) BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3521) BPF_ALU32_REG(BPF_OR, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3522) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3523) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3524) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3525) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3526) { { 0, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3527) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3528) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3529) "ALU64_OR_X: 1 | 2 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3530) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3531) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3532) BPF_ALU32_IMM(BPF_MOV, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3533) BPF_ALU64_REG(BPF_OR, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3534) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3535) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3536) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3537) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3538) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3539) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3540) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3541) "ALU64_OR_X: 0 | 0xffffffff = 0xffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3542) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3543) BPF_LD_IMM64(R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3544) BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3545) BPF_ALU64_REG(BPF_OR, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3546) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3547) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3548) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3549) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3550) { { 0, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3551) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3552) /* BPF_ALU | BPF_OR | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3553) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3554) "ALU_OR_K: 1 | 2 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3555) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3556) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3557) BPF_ALU32_IMM(BPF_OR, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3558) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3559) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3560) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3561) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3562) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3563) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3564) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3565) "ALU_OR_K: 0 & 0xffffffff = 0xffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3566) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3567) BPF_LD_IMM64(R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3568) BPF_ALU32_IMM(BPF_OR, R0, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3569) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3570) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3571) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3572) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3573) { { 0, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3574) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3575) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3576) "ALU64_OR_K: 1 | 2 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3577) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3578) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3579) BPF_ALU64_IMM(BPF_OR, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3580) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3581) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3582) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3583) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3584) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3585) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3586) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3587) "ALU64_OR_K: 0 & 0xffffffff = 0xffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3588) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3589) BPF_LD_IMM64(R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3590) BPF_ALU64_IMM(BPF_OR, R0, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3591) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3592) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3593) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3594) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3595) { { 0, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3596) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3597) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3598) "ALU64_OR_K: 0x0000ffffffff0000 | 0x0 = 0x0000ffff00000000",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3599) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3600) BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3601) BPF_LD_IMM64(R3, 0x0000ffffffff0000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3602) BPF_ALU64_IMM(BPF_OR, R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3603) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3604) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3605) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3606) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3607) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3608) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3609) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3610) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3611) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3612) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3613) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3614) "ALU64_OR_K: 0x0000ffffffff0000 | -1 = 0xffffffffffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3615) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3616) BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3617) BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3618) BPF_ALU64_IMM(BPF_OR, R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3619) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3620) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3621) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3622) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3623) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3624) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3625) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3626) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3627) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3628) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3629) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3630) "ALU64_OR_K: 0x000000000000000 | -1 = 0xffffffffffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3631) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3632) BPF_LD_IMM64(R2, 0x0000000000000000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3633) BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3634) BPF_ALU64_IMM(BPF_OR, R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3635) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3636) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3637) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3638) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3639) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3640) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3641) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3642) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3643) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3644) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3645) /* BPF_ALU | BPF_XOR | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3646) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3647) "ALU_XOR_X: 5 ^ 6 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3648) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3649) BPF_LD_IMM64(R0, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3650) BPF_ALU32_IMM(BPF_MOV, R1, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3651) BPF_ALU32_REG(BPF_XOR, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3652) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3653) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3654) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3655) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3656) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3657) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3658) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3659) "ALU_XOR_X: 0x1 ^ 0xffffffff = 0xfffffffe",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3660) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3661) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3662) BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3663) BPF_ALU32_REG(BPF_XOR, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3664) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3665) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3666) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3667) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3668) { { 0, 0xfffffffe } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3669) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3670) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3671) "ALU64_XOR_X: 5 ^ 6 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3672) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3673) BPF_LD_IMM64(R0, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3674) BPF_ALU32_IMM(BPF_MOV, R1, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3675) BPF_ALU64_REG(BPF_XOR, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3676) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3677) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3678) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3679) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3680) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3681) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3682) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3683) "ALU64_XOR_X: 1 ^ 0xffffffff = 0xfffffffe",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3684) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3685) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3686) BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3687) BPF_ALU64_REG(BPF_XOR, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3688) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3689) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3690) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3691) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3692) { { 0, 0xfffffffe } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3693) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3694) /* BPF_ALU | BPF_XOR | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3695) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3696) "ALU_XOR_K: 5 ^ 6 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3697) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3698) BPF_LD_IMM64(R0, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3699) BPF_ALU32_IMM(BPF_XOR, R0, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3700) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3701) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3702) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3703) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3704) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3705) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3706) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3707) "ALU_XOR_K: 1 ^ 0xffffffff = 0xfffffffe",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3708) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3709) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3710) BPF_ALU32_IMM(BPF_XOR, R0, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3711) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3712) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3713) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3714) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3715) { { 0, 0xfffffffe } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3716) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3717) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3718) "ALU64_XOR_K: 5 ^ 6 = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3719) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3720) BPF_LD_IMM64(R0, 5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3721) BPF_ALU64_IMM(BPF_XOR, R0, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3722) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3723) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3724) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3725) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3726) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3727) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3728) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3729) "ALU64_XOR_K: 1 & 0xffffffff = 0xfffffffe",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3730) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3731) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3732) BPF_ALU64_IMM(BPF_XOR, R0, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3733) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3734) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3735) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3736) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3737) { { 0, 0xfffffffe } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3738) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3739) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3740) "ALU64_XOR_K: 0x0000ffffffff0000 ^ 0x0 = 0x0000ffffffff0000",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3741) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3742) BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3743) BPF_LD_IMM64(R3, 0x0000ffffffff0000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3744) BPF_ALU64_IMM(BPF_XOR, R2, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3745) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3746) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3747) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3748) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3749) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3750) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3751) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3752) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3753) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3754) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3755) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3756) "ALU64_XOR_K: 0x0000ffffffff0000 ^ -1 = 0xffff00000000ffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3757) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3758) BPF_LD_IMM64(R2, 0x0000ffffffff0000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3759) BPF_LD_IMM64(R3, 0xffff00000000ffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3760) BPF_ALU64_IMM(BPF_XOR, R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3761) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3762) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3763) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3764) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3765) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3766) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3767) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3768) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3769) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3770) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3771) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3772) "ALU64_XOR_K: 0x000000000000000 ^ -1 = 0xffffffffffffffff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3773) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3774) BPF_LD_IMM64(R2, 0x0000000000000000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3775) BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3776) BPF_ALU64_IMM(BPF_XOR, R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3777) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3778) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3779) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3780) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3781) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3782) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3783) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3784) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3785) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3786) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3787) /* BPF_ALU | BPF_LSH | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3788) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3789) "ALU_LSH_X: 1 << 1 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3790) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3791) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3792) BPF_ALU32_IMM(BPF_MOV, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3793) BPF_ALU32_REG(BPF_LSH, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3794) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3795) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3796) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3797) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3798) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3799) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3800) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3801) "ALU_LSH_X: 1 << 31 = 0x80000000",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3802) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3803) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3804) BPF_ALU32_IMM(BPF_MOV, R1, 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3805) BPF_ALU32_REG(BPF_LSH, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3806) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3807) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3808) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3809) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3810) { { 0, 0x80000000 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3811) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3812) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3813) "ALU64_LSH_X: 1 << 1 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3814) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3815) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3816) BPF_ALU32_IMM(BPF_MOV, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3817) BPF_ALU64_REG(BPF_LSH, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3818) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3819) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3820) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3821) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3822) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3823) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3824) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3825) "ALU64_LSH_X: 1 << 31 = 0x80000000",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3826) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3827) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3828) BPF_ALU32_IMM(BPF_MOV, R1, 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3829) BPF_ALU64_REG(BPF_LSH, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3830) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3831) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3832) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3833) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3834) { { 0, 0x80000000 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3835) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3836) /* BPF_ALU | BPF_LSH | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3837) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3838) "ALU_LSH_K: 1 << 1 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3839) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3840) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3841) BPF_ALU32_IMM(BPF_LSH, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3842) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3843) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3844) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3845) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3846) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3847) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3848) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3849) "ALU_LSH_K: 1 << 31 = 0x80000000",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3850) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3851) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3852) BPF_ALU32_IMM(BPF_LSH, R0, 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3853) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3854) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3855) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3856) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3857) { { 0, 0x80000000 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3858) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3859) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3860) "ALU64_LSH_K: 1 << 1 = 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3861) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3862) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3863) BPF_ALU64_IMM(BPF_LSH, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3864) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3865) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3866) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3867) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3868) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3869) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3870) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3871) "ALU64_LSH_K: 1 << 31 = 0x80000000",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3872) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3873) BPF_LD_IMM64(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3874) BPF_ALU64_IMM(BPF_LSH, R0, 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3875) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3876) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3877) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3878) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3879) { { 0, 0x80000000 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3880) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3881) /* BPF_ALU | BPF_RSH | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3882) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3883) "ALU_RSH_X: 2 >> 1 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3884) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3885) BPF_LD_IMM64(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3886) BPF_ALU32_IMM(BPF_MOV, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3887) BPF_ALU32_REG(BPF_RSH, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3888) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3889) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3890) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3891) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3892) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3893) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3894) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3895) "ALU_RSH_X: 0x80000000 >> 31 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3896) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3897) BPF_LD_IMM64(R0, 0x80000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3898) BPF_ALU32_IMM(BPF_MOV, R1, 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3899) BPF_ALU32_REG(BPF_RSH, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3900) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3901) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3902) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3903) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3904) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3905) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3906) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3907) "ALU64_RSH_X: 2 >> 1 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3908) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3909) BPF_LD_IMM64(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3910) BPF_ALU32_IMM(BPF_MOV, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3911) BPF_ALU64_REG(BPF_RSH, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3912) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3913) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3914) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3915) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3916) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3917) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3918) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3919) "ALU64_RSH_X: 0x80000000 >> 31 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3920) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3921) BPF_LD_IMM64(R0, 0x80000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3922) BPF_ALU32_IMM(BPF_MOV, R1, 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3923) BPF_ALU64_REG(BPF_RSH, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3924) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3925) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3926) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3927) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3928) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3929) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3930) /* BPF_ALU | BPF_RSH | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3931) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3932) "ALU_RSH_K: 2 >> 1 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3933) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3934) BPF_LD_IMM64(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3935) BPF_ALU32_IMM(BPF_RSH, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3936) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3937) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3938) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3939) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3940) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3941) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3942) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3943) "ALU_RSH_K: 0x80000000 >> 31 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3944) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3945) BPF_LD_IMM64(R0, 0x80000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3946) BPF_ALU32_IMM(BPF_RSH, R0, 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3947) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3948) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3949) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3950) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3951) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3952) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3953) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3954) "ALU64_RSH_K: 2 >> 1 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3955) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3956) BPF_LD_IMM64(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3957) BPF_ALU64_IMM(BPF_RSH, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3958) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3959) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3960) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3961) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3962) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3963) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3964) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3965) "ALU64_RSH_K: 0x80000000 >> 31 = 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3966) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3967) BPF_LD_IMM64(R0, 0x80000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3968) BPF_ALU64_IMM(BPF_RSH, R0, 31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3969) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3970) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3971) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3972) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3973) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3974) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3975) /* BPF_ALU | BPF_ARSH | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3976) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3977) "ALU_ARSH_X: 0xff00ff0000000000 >> 40 = 0xffffffffffff00ff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3978) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3979) BPF_LD_IMM64(R0, 0xff00ff0000000000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3980) BPF_ALU32_IMM(BPF_MOV, R1, 40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3981) BPF_ALU64_REG(BPF_ARSH, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3982) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3983) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3984) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3985) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3986) { { 0, 0xffff00ff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3987) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3988) /* BPF_ALU | BPF_ARSH | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3989) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3990) "ALU_ARSH_K: 0xff00ff0000000000 >> 40 = 0xffffffffffff00ff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3991) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3992) BPF_LD_IMM64(R0, 0xff00ff0000000000LL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3993) BPF_ALU64_IMM(BPF_ARSH, R0, 40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3994) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3995) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3996) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3997) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3998) { { 0, 0xffff00ff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3999) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4000) /* BPF_ALU | BPF_NEG */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4001) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4002) "ALU_NEG: -(3) = -3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4003) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4004) BPF_ALU32_IMM(BPF_MOV, R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4005) BPF_ALU32_IMM(BPF_NEG, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4006) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4007) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4008) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4009) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4010) { { 0, -3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4011) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4012) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4013) "ALU_NEG: -(-3) = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4014) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4015) BPF_ALU32_IMM(BPF_MOV, R0, -3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4016) BPF_ALU32_IMM(BPF_NEG, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4017) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4018) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4019) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4020) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4021) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4022) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4023) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4024) "ALU64_NEG: -(3) = -3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4025) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4026) BPF_LD_IMM64(R0, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4027) BPF_ALU64_IMM(BPF_NEG, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4028) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4029) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4030) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4031) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4032) { { 0, -3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4033) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4034) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4035) "ALU64_NEG: -(-3) = 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4036) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4037) BPF_LD_IMM64(R0, -3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4038) BPF_ALU64_IMM(BPF_NEG, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4039) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4040) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4041) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4042) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4043) { { 0, 3 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4044) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4045) /* BPF_ALU | BPF_END | BPF_FROM_BE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4046) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4047) "ALU_END_FROM_BE 16: 0x0123456789abcdef -> 0xcdef",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4048) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4049) BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4050) BPF_ENDIAN(BPF_FROM_BE, R0, 16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4051) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4052) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4053) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4054) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4055) { { 0, cpu_to_be16(0xcdef) } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4056) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4057) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4058) "ALU_END_FROM_BE 32: 0x0123456789abcdef -> 0x89abcdef",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4059) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4060) BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4061) BPF_ENDIAN(BPF_FROM_BE, R0, 32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4062) BPF_ALU64_REG(BPF_MOV, R1, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4063) BPF_ALU64_IMM(BPF_RSH, R1, 32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4064) BPF_ALU32_REG(BPF_ADD, R0, R1), /* R1 = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4065) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4066) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4067) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4068) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4069) { { 0, cpu_to_be32(0x89abcdef) } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4070) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4071) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4072) "ALU_END_FROM_BE 64: 0x0123456789abcdef -> 0x89abcdef",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4073) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4074) BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4075) BPF_ENDIAN(BPF_FROM_BE, R0, 64),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4076) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4077) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4078) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4079) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4080) { { 0, (u32) cpu_to_be64(0x0123456789abcdefLL) } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4081) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4082) /* BPF_ALU | BPF_END | BPF_FROM_LE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4083) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4084) "ALU_END_FROM_LE 16: 0x0123456789abcdef -> 0xefcd",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4085) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4086) BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4087) BPF_ENDIAN(BPF_FROM_LE, R0, 16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4088) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4089) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4090) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4091) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4092) { { 0, cpu_to_le16(0xcdef) } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4093) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4094) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4095) "ALU_END_FROM_LE 32: 0x0123456789abcdef -> 0xefcdab89",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4096) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4097) BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4098) BPF_ENDIAN(BPF_FROM_LE, R0, 32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4099) BPF_ALU64_REG(BPF_MOV, R1, R0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4100) BPF_ALU64_IMM(BPF_RSH, R1, 32),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4101) BPF_ALU32_REG(BPF_ADD, R0, R1), /* R1 = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4102) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4103) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4104) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4105) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4106) { { 0, cpu_to_le32(0x89abcdef) } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4107) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4108) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4109) "ALU_END_FROM_LE 64: 0x0123456789abcdef -> 0x67452301",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4110) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4111) BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4112) BPF_ENDIAN(BPF_FROM_LE, R0, 64),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4113) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4114) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4115) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4116) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4117) { { 0, (u32) cpu_to_le64(0x0123456789abcdefLL) } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4118) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4119) /* BPF_ST(X) | BPF_MEM | BPF_B/H/W/DW */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4120) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4121) "ST_MEM_B: Store/Load byte: max negative",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4122) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4123) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4124) BPF_ST_MEM(BPF_B, R10, -40, 0xff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4125) BPF_LDX_MEM(BPF_B, R0, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4126) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4127) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4128) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4129) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4130) { { 0, 0xff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4131) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4132) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4133) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4134) "ST_MEM_B: Store/Load byte: max positive",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4135) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4136) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4137) BPF_ST_MEM(BPF_H, R10, -40, 0x7f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4138) BPF_LDX_MEM(BPF_H, R0, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4139) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4140) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4141) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4142) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4143) { { 0, 0x7f } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4144) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4145) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4146) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4147) "STX_MEM_B: Store/Load byte: max negative",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4148) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4149) BPF_LD_IMM64(R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4150) BPF_LD_IMM64(R1, 0xffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4151) BPF_STX_MEM(BPF_B, R10, R1, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4152) BPF_LDX_MEM(BPF_B, R0, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4153) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4154) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4155) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4156) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4157) { { 0, 0xff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4158) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4159) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4160) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4161) "ST_MEM_H: Store/Load half word: max negative",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4162) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4163) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4164) BPF_ST_MEM(BPF_H, R10, -40, 0xffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4165) BPF_LDX_MEM(BPF_H, R0, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4166) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4167) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4168) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4169) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4170) { { 0, 0xffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4171) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4172) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4173) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4174) "ST_MEM_H: Store/Load half word: max positive",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4175) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4176) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4177) BPF_ST_MEM(BPF_H, R10, -40, 0x7fff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4178) BPF_LDX_MEM(BPF_H, R0, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4179) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4180) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4181) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4182) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4183) { { 0, 0x7fff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4184) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4185) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4186) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4187) "STX_MEM_H: Store/Load half word: max negative",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4188) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4189) BPF_LD_IMM64(R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4190) BPF_LD_IMM64(R1, 0xffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4191) BPF_STX_MEM(BPF_H, R10, R1, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4192) BPF_LDX_MEM(BPF_H, R0, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4193) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4194) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4195) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4196) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4197) { { 0, 0xffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4198) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4199) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4200) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4201) "ST_MEM_W: Store/Load word: max negative",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4202) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4203) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4204) BPF_ST_MEM(BPF_W, R10, -40, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4205) BPF_LDX_MEM(BPF_W, R0, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4206) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4207) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4208) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4209) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4210) { { 0, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4211) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4212) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4213) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4214) "ST_MEM_W: Store/Load word: max positive",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4215) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4216) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4217) BPF_ST_MEM(BPF_W, R10, -40, 0x7fffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4218) BPF_LDX_MEM(BPF_W, R0, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4219) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4220) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4221) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4222) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4223) { { 0, 0x7fffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4224) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4225) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4226) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4227) "STX_MEM_W: Store/Load word: max negative",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4228) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4229) BPF_LD_IMM64(R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4230) BPF_LD_IMM64(R1, 0xffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4231) BPF_STX_MEM(BPF_W, R10, R1, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4232) BPF_LDX_MEM(BPF_W, R0, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4233) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4234) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4235) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4236) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4237) { { 0, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4238) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4239) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4240) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4241) "ST_MEM_DW: Store/Load double word: max negative",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4242) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4243) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4244) BPF_ST_MEM(BPF_DW, R10, -40, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4245) BPF_LDX_MEM(BPF_DW, R0, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4246) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4247) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4248) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4249) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4250) { { 0, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4251) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4252) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4253) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4254) "ST_MEM_DW: Store/Load double word: max negative 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4255) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4256) BPF_LD_IMM64(R2, 0xffff00000000ffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4257) BPF_LD_IMM64(R3, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4258) BPF_ST_MEM(BPF_DW, R10, -40, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4259) BPF_LDX_MEM(BPF_DW, R2, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4260) BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4261) BPF_MOV32_IMM(R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4262) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4263) BPF_MOV32_IMM(R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4264) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4265) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4266) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4267) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4268) { { 0, 0x1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4269) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4270) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4271) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4272) "ST_MEM_DW: Store/Load double word: max positive",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4273) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4274) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4275) BPF_ST_MEM(BPF_DW, R10, -40, 0x7fffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4276) BPF_LDX_MEM(BPF_DW, R0, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4277) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4278) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4279) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4280) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4281) { { 0, 0x7fffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4282) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4283) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4284) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4285) "STX_MEM_DW: Store/Load double word: max negative",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4286) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4287) BPF_LD_IMM64(R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4288) BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4289) BPF_STX_MEM(BPF_DW, R10, R1, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4290) BPF_LDX_MEM(BPF_DW, R0, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4291) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4292) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4293) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4294) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4295) { { 0, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4296) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4297) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4298) /* BPF_STX | BPF_XADD | BPF_W/DW */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4299) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4300) "STX_XADD_W: Test: 0x12 + 0x10 = 0x22",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4301) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4302) BPF_ALU32_IMM(BPF_MOV, R0, 0x12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4303) BPF_ST_MEM(BPF_W, R10, -40, 0x10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4304) BPF_STX_XADD(BPF_W, R10, R0, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4305) BPF_LDX_MEM(BPF_W, R0, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4306) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4307) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4308) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4309) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4310) { { 0, 0x22 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4311) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4312) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4313) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4314) "STX_XADD_W: Test side-effects, r10: 0x12 + 0x10 = 0x22",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4315) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4316) BPF_ALU64_REG(BPF_MOV, R1, R10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4317) BPF_ALU32_IMM(BPF_MOV, R0, 0x12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4318) BPF_ST_MEM(BPF_W, R10, -40, 0x10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4319) BPF_STX_XADD(BPF_W, R10, R0, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4320) BPF_ALU64_REG(BPF_MOV, R0, R10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4321) BPF_ALU64_REG(BPF_SUB, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4322) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4323) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4324) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4325) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4326) { { 0, 0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4327) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4328) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4329) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4330) "STX_XADD_W: Test side-effects, r0: 0x12 + 0x10 = 0x22",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4331) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4332) BPF_ALU32_IMM(BPF_MOV, R0, 0x12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4333) BPF_ST_MEM(BPF_W, R10, -40, 0x10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4334) BPF_STX_XADD(BPF_W, R10, R0, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4335) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4336) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4337) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4338) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4339) { { 0, 0x12 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4340) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4341) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4342) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4343) "STX_XADD_W: X + 1 + 1 + 1 + ...",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4344) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4345) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4346) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4347) { { 0, 4134 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4348) .fill_helper = bpf_fill_stxw,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4349) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4350) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4351) "STX_XADD_DW: Test: 0x12 + 0x10 = 0x22",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4352) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4353) BPF_ALU32_IMM(BPF_MOV, R0, 0x12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4354) BPF_ST_MEM(BPF_DW, R10, -40, 0x10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4355) BPF_STX_XADD(BPF_DW, R10, R0, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4356) BPF_LDX_MEM(BPF_DW, R0, R10, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4357) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4358) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4359) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4360) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4361) { { 0, 0x22 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4362) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4363) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4364) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4365) "STX_XADD_DW: Test side-effects, r10: 0x12 + 0x10 = 0x22",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4366) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4367) BPF_ALU64_REG(BPF_MOV, R1, R10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4368) BPF_ALU32_IMM(BPF_MOV, R0, 0x12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4369) BPF_ST_MEM(BPF_DW, R10, -40, 0x10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4370) BPF_STX_XADD(BPF_DW, R10, R0, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4371) BPF_ALU64_REG(BPF_MOV, R0, R10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4372) BPF_ALU64_REG(BPF_SUB, R0, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4373) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4374) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4375) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4376) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4377) { { 0, 0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4378) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4379) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4380) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4381) "STX_XADD_DW: Test side-effects, r0: 0x12 + 0x10 = 0x22",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4382) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4383) BPF_ALU32_IMM(BPF_MOV, R0, 0x12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4384) BPF_ST_MEM(BPF_DW, R10, -40, 0x10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4385) BPF_STX_XADD(BPF_DW, R10, R0, -40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4386) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4387) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4388) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4389) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4390) { { 0, 0x12 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4391) .stack_depth = 40,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4392) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4393) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4394) "STX_XADD_DW: X + 1 + 1 + 1 + ...",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4395) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4396) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4397) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4398) { { 0, 4134 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4399) .fill_helper = bpf_fill_stxdw,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4400) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4401) /* BPF_JMP | BPF_EXIT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4402) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4403) "JMP_EXIT",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4404) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4405) BPF_ALU32_IMM(BPF_MOV, R0, 0x4711),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4406) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4407) BPF_ALU32_IMM(BPF_MOV, R0, 0x4712),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4408) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4409) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4410) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4411) { { 0, 0x4711 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4412) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4413) /* BPF_JMP | BPF_JA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4414) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4415) "JMP_JA: Unconditional jump: if (true) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4416) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4417) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4418) BPF_JMP_IMM(BPF_JA, 0, 0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4419) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4420) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4421) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4422) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4423) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4424) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4425) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4426) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4427) /* BPF_JMP | BPF_JSLT | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4428) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4429) "JMP_JSLT_K: Signed jump: if (-2 < -1) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4430) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4431) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4432) BPF_LD_IMM64(R1, 0xfffffffffffffffeLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4433) BPF_JMP_IMM(BPF_JSLT, R1, -1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4434) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4435) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4436) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4437) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4438) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4439) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4440) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4441) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4442) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4443) "JMP_JSLT_K: Signed jump: if (-1 < -1) return 0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4444) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4445) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4446) BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4447) BPF_JMP_IMM(BPF_JSLT, R1, -1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4448) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4449) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4450) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4451) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4452) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4453) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4454) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4455) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4456) /* BPF_JMP | BPF_JSGT | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4457) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4458) "JMP_JSGT_K: Signed jump: if (-1 > -2) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4459) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4460) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4461) BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4462) BPF_JMP_IMM(BPF_JSGT, R1, -2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4463) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4464) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4465) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4466) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4467) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4468) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4469) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4470) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4471) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4472) "JMP_JSGT_K: Signed jump: if (-1 > -1) return 0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4473) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4474) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4475) BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4476) BPF_JMP_IMM(BPF_JSGT, R1, -1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4477) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4478) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4479) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4480) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4481) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4482) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4483) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4484) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4485) /* BPF_JMP | BPF_JSLE | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4486) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4487) "JMP_JSLE_K: Signed jump: if (-2 <= -1) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4488) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4489) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4490) BPF_LD_IMM64(R1, 0xfffffffffffffffeLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4491) BPF_JMP_IMM(BPF_JSLE, R1, -1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4492) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4493) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4494) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4495) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4496) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4497) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4498) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4499) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4500) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4501) "JMP_JSLE_K: Signed jump: if (-1 <= -1) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4502) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4503) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4504) BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4505) BPF_JMP_IMM(BPF_JSLE, R1, -1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4506) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4507) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4508) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4509) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4510) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4511) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4512) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4513) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4514) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4515) "JMP_JSLE_K: Signed jump: value walk 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4516) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4517) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4518) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4519) BPF_JMP_IMM(BPF_JSLE, R1, 0, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4520) BPF_ALU64_IMM(BPF_SUB, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4521) BPF_JMP_IMM(BPF_JSLE, R1, 0, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4522) BPF_ALU64_IMM(BPF_SUB, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4523) BPF_JMP_IMM(BPF_JSLE, R1, 0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4524) BPF_ALU64_IMM(BPF_SUB, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4525) BPF_JMP_IMM(BPF_JSLE, R1, 0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4526) BPF_EXIT_INSN(), /* bad exit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4527) BPF_ALU32_IMM(BPF_MOV, R0, 1), /* good exit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4528) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4529) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4530) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4531) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4532) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4533) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4534) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4535) "JMP_JSLE_K: Signed jump: value walk 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4536) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4537) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4538) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4539) BPF_JMP_IMM(BPF_JSLE, R1, 0, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4540) BPF_ALU64_IMM(BPF_SUB, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4541) BPF_JMP_IMM(BPF_JSLE, R1, 0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4542) BPF_ALU64_IMM(BPF_SUB, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4543) BPF_JMP_IMM(BPF_JSLE, R1, 0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4544) BPF_EXIT_INSN(), /* bad exit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4545) BPF_ALU32_IMM(BPF_MOV, R0, 1), /* good exit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4546) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4547) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4548) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4549) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4550) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4551) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4552) /* BPF_JMP | BPF_JSGE | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4553) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4554) "JMP_JSGE_K: Signed jump: if (-1 >= -2) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4555) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4556) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4557) BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4558) BPF_JMP_IMM(BPF_JSGE, R1, -2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4559) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4560) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4561) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4562) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4563) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4564) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4565) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4566) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4567) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4568) "JMP_JSGE_K: Signed jump: if (-1 >= -1) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4569) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4570) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4571) BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4572) BPF_JMP_IMM(BPF_JSGE, R1, -1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4573) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4574) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4575) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4576) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4577) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4578) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4579) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4580) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4581) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4582) "JMP_JSGE_K: Signed jump: value walk 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4583) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4584) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4585) BPF_LD_IMM64(R1, -3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4586) BPF_JMP_IMM(BPF_JSGE, R1, 0, 6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4587) BPF_ALU64_IMM(BPF_ADD, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4588) BPF_JMP_IMM(BPF_JSGE, R1, 0, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4589) BPF_ALU64_IMM(BPF_ADD, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4590) BPF_JMP_IMM(BPF_JSGE, R1, 0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4591) BPF_ALU64_IMM(BPF_ADD, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4592) BPF_JMP_IMM(BPF_JSGE, R1, 0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4593) BPF_EXIT_INSN(), /* bad exit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4594) BPF_ALU32_IMM(BPF_MOV, R0, 1), /* good exit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4595) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4596) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4597) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4598) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4599) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4600) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4601) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4602) "JMP_JSGE_K: Signed jump: value walk 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4603) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4604) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4605) BPF_LD_IMM64(R1, -3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4606) BPF_JMP_IMM(BPF_JSGE, R1, 0, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4607) BPF_ALU64_IMM(BPF_ADD, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4608) BPF_JMP_IMM(BPF_JSGE, R1, 0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4609) BPF_ALU64_IMM(BPF_ADD, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4610) BPF_JMP_IMM(BPF_JSGE, R1, 0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4611) BPF_EXIT_INSN(), /* bad exit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4612) BPF_ALU32_IMM(BPF_MOV, R0, 1), /* good exit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4613) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4614) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4615) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4616) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4617) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4618) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4619) /* BPF_JMP | BPF_JGT | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4620) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4621) "JMP_JGT_K: if (3 > 2) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4622) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4623) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4624) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4625) BPF_JMP_IMM(BPF_JGT, R1, 2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4626) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4627) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4628) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4629) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4630) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4631) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4632) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4633) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4634) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4635) "JMP_JGT_K: Unsigned jump: if (-1 > 1) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4636) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4637) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4638) BPF_LD_IMM64(R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4639) BPF_JMP_IMM(BPF_JGT, R1, 1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4640) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4641) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4642) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4643) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4644) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4645) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4646) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4647) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4648) /* BPF_JMP | BPF_JLT | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4649) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4650) "JMP_JLT_K: if (2 < 3) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4651) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4652) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4653) BPF_LD_IMM64(R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4654) BPF_JMP_IMM(BPF_JLT, R1, 3, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4655) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4656) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4657) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4658) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4659) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4660) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4661) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4662) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4663) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4664) "JMP_JGT_K: Unsigned jump: if (1 < -1) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4665) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4666) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4667) BPF_LD_IMM64(R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4668) BPF_JMP_IMM(BPF_JLT, R1, -1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4669) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4670) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4671) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4672) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4673) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4674) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4675) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4676) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4677) /* BPF_JMP | BPF_JGE | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4678) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4679) "JMP_JGE_K: if (3 >= 2) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4680) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4681) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4682) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4683) BPF_JMP_IMM(BPF_JGE, R1, 2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4684) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4685) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4686) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4687) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4688) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4689) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4690) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4691) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4692) /* BPF_JMP | BPF_JLE | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4693) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4694) "JMP_JLE_K: if (2 <= 3) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4695) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4696) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4697) BPF_LD_IMM64(R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4698) BPF_JMP_IMM(BPF_JLE, R1, 3, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4699) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4700) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4701) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4702) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4703) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4704) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4705) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4706) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4707) /* BPF_JMP | BPF_JGT | BPF_K jump backwards */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4708) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4709) "JMP_JGT_K: if (3 > 2) return 1 (jump backwards)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4710) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4711) BPF_JMP_IMM(BPF_JA, 0, 0, 2), /* goto start */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4712) BPF_ALU32_IMM(BPF_MOV, R0, 1), /* out: */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4713) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4714) BPF_ALU32_IMM(BPF_MOV, R0, 0), /* start: */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4715) BPF_LD_IMM64(R1, 3), /* note: this takes 2 insns */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4716) BPF_JMP_IMM(BPF_JGT, R1, 2, -6), /* goto out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4717) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4718) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4719) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4720) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4721) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4722) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4723) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4724) "JMP_JGE_K: if (3 >= 3) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4725) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4726) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4727) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4728) BPF_JMP_IMM(BPF_JGE, R1, 3, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4729) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4730) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4731) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4732) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4733) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4734) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4735) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4736) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4737) /* BPF_JMP | BPF_JLT | BPF_K jump backwards */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4738) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4739) "JMP_JGT_K: if (2 < 3) return 1 (jump backwards)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4740) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4741) BPF_JMP_IMM(BPF_JA, 0, 0, 2), /* goto start */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4742) BPF_ALU32_IMM(BPF_MOV, R0, 1), /* out: */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4743) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4744) BPF_ALU32_IMM(BPF_MOV, R0, 0), /* start: */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4745) BPF_LD_IMM64(R1, 2), /* note: this takes 2 insns */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4746) BPF_JMP_IMM(BPF_JLT, R1, 3, -6), /* goto out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4747) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4748) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4749) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4750) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4751) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4752) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4753) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4754) "JMP_JLE_K: if (3 <= 3) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4755) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4756) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4757) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4758) BPF_JMP_IMM(BPF_JLE, R1, 3, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4759) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4760) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4761) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4762) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4763) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4764) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4765) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4766) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4767) /* BPF_JMP | BPF_JNE | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4768) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4769) "JMP_JNE_K: if (3 != 2) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4770) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4771) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4772) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4773) BPF_JMP_IMM(BPF_JNE, R1, 2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4774) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4775) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4776) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4777) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4778) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4779) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4780) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4781) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4782) /* BPF_JMP | BPF_JEQ | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4783) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4784) "JMP_JEQ_K: if (3 == 3) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4785) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4786) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4787) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4788) BPF_JMP_IMM(BPF_JEQ, R1, 3, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4789) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4790) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4791) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4792) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4793) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4794) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4795) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4796) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4797) /* BPF_JMP | BPF_JSET | BPF_K */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4798) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4799) "JMP_JSET_K: if (0x3 & 0x2) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4800) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4801) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4802) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4803) BPF_JMP_IMM(BPF_JSET, R1, 2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4804) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4805) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4806) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4807) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4808) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4809) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4810) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4811) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4812) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4813) "JMP_JSET_K: if (0x3 & 0xffffffff) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4814) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4815) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4816) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4817) BPF_JMP_IMM(BPF_JSET, R1, 0xffffffff, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4818) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4819) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4820) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4821) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4822) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4823) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4824) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4825) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4826) /* BPF_JMP | BPF_JSGT | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4827) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4828) "JMP_JSGT_X: Signed jump: if (-1 > -2) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4829) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4830) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4831) BPF_LD_IMM64(R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4832) BPF_LD_IMM64(R2, -2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4833) BPF_JMP_REG(BPF_JSGT, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4834) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4835) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4836) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4837) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4838) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4839) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4840) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4841) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4842) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4843) "JMP_JSGT_X: Signed jump: if (-1 > -1) return 0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4844) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4845) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4846) BPF_LD_IMM64(R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4847) BPF_LD_IMM64(R2, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4848) BPF_JMP_REG(BPF_JSGT, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4849) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4850) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4851) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4852) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4853) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4854) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4855) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4856) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4857) /* BPF_JMP | BPF_JSLT | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4858) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4859) "JMP_JSLT_X: Signed jump: if (-2 < -1) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4860) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4861) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4862) BPF_LD_IMM64(R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4863) BPF_LD_IMM64(R2, -2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4864) BPF_JMP_REG(BPF_JSLT, R2, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4865) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4866) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4867) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4868) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4869) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4870) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4871) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4872) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4873) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4874) "JMP_JSLT_X: Signed jump: if (-1 < -1) return 0",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4875) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4876) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4877) BPF_LD_IMM64(R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4878) BPF_LD_IMM64(R2, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4879) BPF_JMP_REG(BPF_JSLT, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4880) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4881) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4882) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4883) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4884) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4885) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4886) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4887) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4888) /* BPF_JMP | BPF_JSGE | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4889) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4890) "JMP_JSGE_X: Signed jump: if (-1 >= -2) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4891) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4892) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4893) BPF_LD_IMM64(R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4894) BPF_LD_IMM64(R2, -2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4895) BPF_JMP_REG(BPF_JSGE, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4896) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4897) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4898) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4899) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4900) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4901) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4902) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4903) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4904) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4905) "JMP_JSGE_X: Signed jump: if (-1 >= -1) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4906) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4907) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4908) BPF_LD_IMM64(R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4909) BPF_LD_IMM64(R2, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4910) BPF_JMP_REG(BPF_JSGE, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4911) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4912) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4913) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4914) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4915) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4916) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4917) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4918) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4919) /* BPF_JMP | BPF_JSLE | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4920) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4921) "JMP_JSLE_X: Signed jump: if (-2 <= -1) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4922) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4923) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4924) BPF_LD_IMM64(R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4925) BPF_LD_IMM64(R2, -2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4926) BPF_JMP_REG(BPF_JSLE, R2, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4927) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4928) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4929) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4930) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4931) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4932) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4933) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4934) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4935) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4936) "JMP_JSLE_X: Signed jump: if (-1 <= -1) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4937) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4938) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4939) BPF_LD_IMM64(R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4940) BPF_LD_IMM64(R2, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4941) BPF_JMP_REG(BPF_JSLE, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4942) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4943) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4944) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4945) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4946) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4947) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4948) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4949) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4950) /* BPF_JMP | BPF_JGT | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4951) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4952) "JMP_JGT_X: if (3 > 2) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4953) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4954) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4955) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4956) BPF_LD_IMM64(R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4957) BPF_JMP_REG(BPF_JGT, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4958) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4959) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4960) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4961) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4962) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4963) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4964) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4965) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4966) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4967) "JMP_JGT_X: Unsigned jump: if (-1 > 1) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4968) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4969) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4970) BPF_LD_IMM64(R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4971) BPF_LD_IMM64(R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4972) BPF_JMP_REG(BPF_JGT, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4973) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4974) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4975) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4976) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4977) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4978) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4979) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4980) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4981) /* BPF_JMP | BPF_JLT | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4982) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4983) "JMP_JLT_X: if (2 < 3) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4984) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4985) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4986) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4987) BPF_LD_IMM64(R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4988) BPF_JMP_REG(BPF_JLT, R2, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4989) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4990) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4991) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4992) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4993) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4994) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4995) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4996) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4997) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4998) "JMP_JLT_X: Unsigned jump: if (1 < -1) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4999) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5000) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5001) BPF_LD_IMM64(R1, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5002) BPF_LD_IMM64(R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5003) BPF_JMP_REG(BPF_JLT, R2, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5004) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5005) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5006) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5007) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5008) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5009) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5010) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5011) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5012) /* BPF_JMP | BPF_JGE | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5013) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5014) "JMP_JGE_X: if (3 >= 2) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5015) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5016) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5017) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5018) BPF_LD_IMM64(R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5019) BPF_JMP_REG(BPF_JGE, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5020) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5021) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5022) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5023) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5024) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5025) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5026) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5027) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5028) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5029) "JMP_JGE_X: if (3 >= 3) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5030) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5031) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5032) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5033) BPF_LD_IMM64(R2, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5034) BPF_JMP_REG(BPF_JGE, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5035) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5036) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5037) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5038) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5039) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5040) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5041) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5042) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5043) /* BPF_JMP | BPF_JLE | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5044) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5045) "JMP_JLE_X: if (2 <= 3) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5046) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5047) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5048) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5049) BPF_LD_IMM64(R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5050) BPF_JMP_REG(BPF_JLE, R2, R1, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5051) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5052) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5053) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5054) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5055) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5056) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5057) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5058) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5059) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5060) "JMP_JLE_X: if (3 <= 3) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5061) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5062) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5063) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5064) BPF_LD_IMM64(R2, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5065) BPF_JMP_REG(BPF_JLE, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5066) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5067) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5068) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5069) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5070) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5071) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5072) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5073) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5074) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5075) /* Mainly testing JIT + imm64 here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5076) "JMP_JGE_X: ldimm64 test 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5077) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5078) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5079) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5080) BPF_LD_IMM64(R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5081) BPF_JMP_REG(BPF_JGE, R1, R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5082) BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5083) BPF_LD_IMM64(R0, 0xeeeeeeeeeeeeeeeeULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5084) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5085) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5086) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5087) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5088) { { 0, 0xeeeeeeeeU } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5089) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5090) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5091) "JMP_JGE_X: ldimm64 test 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5092) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5093) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5094) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5095) BPF_LD_IMM64(R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5096) BPF_JMP_REG(BPF_JGE, R1, R2, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5097) BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5098) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5099) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5100) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5101) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5102) { { 0, 0xffffffffU } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5103) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5104) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5105) "JMP_JGE_X: ldimm64 test 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5106) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5107) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5108) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5109) BPF_LD_IMM64(R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5110) BPF_JMP_REG(BPF_JGE, R1, R2, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5111) BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5112) BPF_LD_IMM64(R0, 0xeeeeeeeeeeeeeeeeULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5113) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5114) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5115) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5116) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5117) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5118) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5119) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5120) "JMP_JLE_X: ldimm64 test 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5121) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5122) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5123) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5124) BPF_LD_IMM64(R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5125) BPF_JMP_REG(BPF_JLE, R2, R1, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5126) BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5127) BPF_LD_IMM64(R0, 0xeeeeeeeeeeeeeeeeULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5128) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5129) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5130) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5131) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5132) { { 0, 0xeeeeeeeeU } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5133) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5134) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5135) "JMP_JLE_X: ldimm64 test 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5136) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5137) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5138) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5139) BPF_LD_IMM64(R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5140) BPF_JMP_REG(BPF_JLE, R2, R1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5141) BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5142) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5143) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5144) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5145) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5146) { { 0, 0xffffffffU } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5147) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5148) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5149) "JMP_JLE_X: ldimm64 test 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5150) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5151) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5152) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5153) BPF_LD_IMM64(R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5154) BPF_JMP_REG(BPF_JLE, R2, R1, 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5155) BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5156) BPF_LD_IMM64(R0, 0xeeeeeeeeeeeeeeeeULL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5157) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5158) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5159) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5160) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5161) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5162) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5163) /* BPF_JMP | BPF_JNE | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5164) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5165) "JMP_JNE_X: if (3 != 2) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5166) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5167) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5168) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5169) BPF_LD_IMM64(R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5170) BPF_JMP_REG(BPF_JNE, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5171) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5172) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5173) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5174) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5175) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5176) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5177) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5178) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5179) /* BPF_JMP | BPF_JEQ | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5180) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5181) "JMP_JEQ_X: if (3 == 3) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5182) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5183) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5184) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5185) BPF_LD_IMM64(R2, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5186) BPF_JMP_REG(BPF_JEQ, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5187) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5188) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5189) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5190) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5191) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5192) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5193) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5194) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5195) /* BPF_JMP | BPF_JSET | BPF_X */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5196) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5197) "JMP_JSET_X: if (0x3 & 0x2) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5198) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5199) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5200) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5201) BPF_LD_IMM64(R2, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5202) BPF_JMP_REG(BPF_JSET, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5203) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5204) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5205) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5206) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5207) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5208) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5209) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5210) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5211) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5212) "JMP_JSET_X: if (0x3 & 0xffffffff) return 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5213) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5214) BPF_ALU32_IMM(BPF_MOV, R0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5215) BPF_LD_IMM64(R1, 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5216) BPF_LD_IMM64(R2, 0xffffffff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5217) BPF_JMP_REG(BPF_JSET, R1, R2, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5218) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5219) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5220) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5221) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5222) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5223) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5224) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5225) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5226) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5227) "JMP_JA: Jump, gap, jump, ...",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5228) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5229) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5230) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5231) { { 0, 0xababcbac } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5232) .fill_helper = bpf_fill_ja,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5233) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5234) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5235) "BPF_MAXINSNS: Maximum possible literals",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5236) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5237) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5238) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5239) { { 0, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5240) .fill_helper = bpf_fill_maxinsns1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5241) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5242) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5243) "BPF_MAXINSNS: Single literal",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5244) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5245) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5246) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5247) { { 0, 0xfefefefe } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5248) .fill_helper = bpf_fill_maxinsns2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5249) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5250) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5251) "BPF_MAXINSNS: Run/add until end",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5252) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5253) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5254) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5255) { { 0, 0x947bf368 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5256) .fill_helper = bpf_fill_maxinsns3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5257) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5258) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5259) "BPF_MAXINSNS: Too many instructions",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5260) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5261) CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5262) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5263) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5264) .fill_helper = bpf_fill_maxinsns4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5265) .expected_errcode = -EINVAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5266) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5267) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5268) "BPF_MAXINSNS: Very long jump",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5269) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5270) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5271) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5272) { { 0, 0xabababab } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5273) .fill_helper = bpf_fill_maxinsns5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5274) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5275) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5276) "BPF_MAXINSNS: Ctx heavy transformations",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5277) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5278) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5279) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5280) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5281) { 1, SKB_VLAN_PRESENT },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5282) { 10, SKB_VLAN_PRESENT }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5283) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5284) .fill_helper = bpf_fill_maxinsns6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5285) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5286) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5287) "BPF_MAXINSNS: Call heavy transformations",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5288) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5289) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5290) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5291) { { 1, 0 }, { 10, 0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5292) .fill_helper = bpf_fill_maxinsns7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5293) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5294) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5295) "BPF_MAXINSNS: Jump heavy test",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5296) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5297) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5298) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5299) { { 0, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5300) .fill_helper = bpf_fill_maxinsns8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5301) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5302) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5303) "BPF_MAXINSNS: Very long jump backwards",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5304) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5305) INTERNAL | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5306) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5307) { { 0, 0xcbababab } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5308) .fill_helper = bpf_fill_maxinsns9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5309) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5310) { /* Mainly checking JIT here. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5311) "BPF_MAXINSNS: Edge hopping nuthouse",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5312) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5313) INTERNAL | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5314) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5315) { { 0, 0xabababac } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5316) .fill_helper = bpf_fill_maxinsns10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5317) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5318) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5319) "BPF_MAXINSNS: Jump, gap, jump, ...",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5320) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5321) #if defined(CONFIG_BPF_JIT_ALWAYS_ON) && defined(CONFIG_X86)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5322) CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5323) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5324) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5325) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5326) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5327) { { 0, 0xababcbac } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5328) .fill_helper = bpf_fill_maxinsns11,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5329) .expected_errcode = -ENOTSUPP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5330) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5331) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5332) "BPF_MAXINSNS: jump over MSH",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5333) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5334) CLASSIC | FLAG_EXPECTED_FAIL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5335) { 0xfa, 0xfb, 0xfc, 0xfd, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5336) { { 4, 0xabababab } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5337) .fill_helper = bpf_fill_maxinsns12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5338) .expected_errcode = -EINVAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5339) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5340) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5341) "BPF_MAXINSNS: exec all MSH",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5342) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5343) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5344) { 0xfa, 0xfb, 0xfc, 0xfd, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5345) { { 4, 0xababab83 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5346) .fill_helper = bpf_fill_maxinsns13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5347) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5348) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5349) "BPF_MAXINSNS: ld_abs+get_processor_id",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5350) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5351) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5352) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5353) { { 1, 0xbee } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5354) .fill_helper = bpf_fill_ld_abs_get_processor_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5355) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5356) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5357) * LD_IND / LD_ABS on fragmented SKBs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5358) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5359) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5360) "LD_IND byte frag",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5361) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5362) BPF_STMT(BPF_LDX | BPF_IMM, 0x40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5363) BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5364) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5365) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5366) CLASSIC | FLAG_SKB_FRAG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5367) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5368) { {0x40, 0x42} },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5369) .frag_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5370) 0x42, 0x00, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5371) 0x43, 0x44, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5372) 0x21, 0x07, 0x19, 0x83,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5373) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5374) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5375) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5376) "LD_IND halfword frag",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5377) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5378) BPF_STMT(BPF_LDX | BPF_IMM, 0x40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5379) BPF_STMT(BPF_LD | BPF_IND | BPF_H, 0x4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5380) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5381) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5382) CLASSIC | FLAG_SKB_FRAG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5383) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5384) { {0x40, 0x4344} },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5385) .frag_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5386) 0x42, 0x00, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5387) 0x43, 0x44, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5388) 0x21, 0x07, 0x19, 0x83,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5389) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5390) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5391) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5392) "LD_IND word frag",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5393) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5394) BPF_STMT(BPF_LDX | BPF_IMM, 0x40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5395) BPF_STMT(BPF_LD | BPF_IND | BPF_W, 0x8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5396) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5397) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5398) CLASSIC | FLAG_SKB_FRAG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5399) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5400) { {0x40, 0x21071983} },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5401) .frag_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5402) 0x42, 0x00, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5403) 0x43, 0x44, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5404) 0x21, 0x07, 0x19, 0x83,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5405) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5406) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5407) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5408) "LD_IND halfword mixed head/frag",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5409) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5410) BPF_STMT(BPF_LDX | BPF_IMM, 0x40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5411) BPF_STMT(BPF_LD | BPF_IND | BPF_H, -0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5412) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5413) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5414) CLASSIC | FLAG_SKB_FRAG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5415) { [0x3e] = 0x25, [0x3f] = 0x05, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5416) { {0x40, 0x0519} },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5417) .frag_data = { 0x19, 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5418) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5419) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5420) "LD_IND word mixed head/frag",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5421) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5422) BPF_STMT(BPF_LDX | BPF_IMM, 0x40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5423) BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5424) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5425) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5426) CLASSIC | FLAG_SKB_FRAG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5427) { [0x3e] = 0x25, [0x3f] = 0x05, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5428) { {0x40, 0x25051982} },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5429) .frag_data = { 0x19, 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5430) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5431) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5432) "LD_ABS byte frag",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5433) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5434) BPF_STMT(BPF_LD | BPF_ABS | BPF_B, 0x40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5435) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5436) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5437) CLASSIC | FLAG_SKB_FRAG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5438) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5439) { {0x40, 0x42} },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5440) .frag_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5441) 0x42, 0x00, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5442) 0x43, 0x44, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5443) 0x21, 0x07, 0x19, 0x83,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5444) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5445) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5446) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5447) "LD_ABS halfword frag",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5448) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5449) BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x44),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5450) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5451) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5452) CLASSIC | FLAG_SKB_FRAG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5453) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5454) { {0x40, 0x4344} },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5455) .frag_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5456) 0x42, 0x00, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5457) 0x43, 0x44, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5458) 0x21, 0x07, 0x19, 0x83,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5459) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5460) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5461) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5462) "LD_ABS word frag",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5463) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5464) BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x48),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5465) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5466) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5467) CLASSIC | FLAG_SKB_FRAG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5468) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5469) { {0x40, 0x21071983} },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5470) .frag_data = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5471) 0x42, 0x00, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5472) 0x43, 0x44, 0x00, 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5473) 0x21, 0x07, 0x19, 0x83,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5474) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5475) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5476) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5477) "LD_ABS halfword mixed head/frag",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5478) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5479) BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x3f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5480) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5481) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5482) CLASSIC | FLAG_SKB_FRAG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5483) { [0x3e] = 0x25, [0x3f] = 0x05, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5484) { {0x40, 0x0519} },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5485) .frag_data = { 0x19, 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5486) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5487) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5488) "LD_ABS word mixed head/frag",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5489) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5490) BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5491) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5492) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5493) CLASSIC | FLAG_SKB_FRAG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5494) { [0x3e] = 0x25, [0x3f] = 0x05, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5495) { {0x40, 0x25051982} },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5496) .frag_data = { 0x19, 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5497) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5498) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5499) * LD_IND / LD_ABS on non fragmented SKBs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5500) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5501) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5502) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5503) * this tests that the JIT/interpreter correctly resets X
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5504) * before using it in an LD_IND instruction.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5505) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5506) "LD_IND byte default X",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5507) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5508) BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5509) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5510) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5511) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5512) { [0x1] = 0x42 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5513) { {0x40, 0x42 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5514) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5515) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5516) "LD_IND byte positive offset",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5517) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5518) BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5519) BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5520) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5521) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5522) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5523) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5524) { {0x40, 0x82 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5525) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5526) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5527) "LD_IND byte negative offset",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5528) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5529) BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5530) BPF_STMT(BPF_LD | BPF_IND | BPF_B, -0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5531) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5532) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5533) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5534) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5535) { {0x40, 0x05 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5536) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5537) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5538) "LD_IND byte positive offset, all ff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5539) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5540) BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5541) BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5542) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5543) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5544) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5545) { [0x3c] = 0xff, [0x3d] = 0xff, [0x3e] = 0xff, [0x3f] = 0xff },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5546) { {0x40, 0xff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5547) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5548) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5549) "LD_IND byte positive offset, out of bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5550) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5551) BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5552) BPF_STMT(BPF_LD | BPF_IND | BPF_B, 0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5553) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5554) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5555) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5556) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5557) { {0x3f, 0 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5558) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5559) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5560) "LD_IND byte negative offset, out of bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5561) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5562) BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5563) BPF_STMT(BPF_LD | BPF_IND | BPF_B, -0x3f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5564) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5565) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5566) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5567) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5568) { {0x3f, 0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5569) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5570) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5571) "LD_IND byte negative offset, multiple calls",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5572) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5573) BPF_STMT(BPF_LDX | BPF_IMM, 0x3b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5574) BPF_STMT(BPF_LD | BPF_IND | BPF_B, SKF_LL_OFF + 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5575) BPF_STMT(BPF_LD | BPF_IND | BPF_B, SKF_LL_OFF + 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5576) BPF_STMT(BPF_LD | BPF_IND | BPF_B, SKF_LL_OFF + 3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5577) BPF_STMT(BPF_LD | BPF_IND | BPF_B, SKF_LL_OFF + 4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5578) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5579) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5580) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5581) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5582) { {0x40, 0x82 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5583) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5584) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5585) "LD_IND halfword positive offset",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5586) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5587) BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5588) BPF_STMT(BPF_LD | BPF_IND | BPF_H, 0x2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5589) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5590) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5591) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5592) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5593) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5594) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5595) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5596) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5597) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5598) { {0x40, 0xdd88 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5599) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5600) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5601) "LD_IND halfword negative offset",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5602) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5603) BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5604) BPF_STMT(BPF_LD | BPF_IND | BPF_H, -0x2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5605) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5606) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5607) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5608) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5609) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5610) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5611) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5612) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5613) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5614) { {0x40, 0xbb66 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5615) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5616) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5617) "LD_IND halfword unaligned",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5618) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5619) BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5620) BPF_STMT(BPF_LD | BPF_IND | BPF_H, -0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5621) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5622) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5623) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5624) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5625) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5626) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5627) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5628) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5629) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5630) { {0x40, 0x66cc } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5631) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5632) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5633) "LD_IND halfword positive offset, all ff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5634) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5635) BPF_STMT(BPF_LDX | BPF_IMM, 0x3d),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5636) BPF_STMT(BPF_LD | BPF_IND | BPF_H, 0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5637) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5638) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5639) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5640) { [0x3c] = 0xff, [0x3d] = 0xff, [0x3e] = 0xff, [0x3f] = 0xff },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5641) { {0x40, 0xffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5642) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5643) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5644) "LD_IND halfword positive offset, out of bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5645) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5646) BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5647) BPF_STMT(BPF_LD | BPF_IND | BPF_H, 0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5648) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5649) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5650) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5651) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5652) { {0x3f, 0 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5653) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5654) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5655) "LD_IND halfword negative offset, out of bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5656) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5657) BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5658) BPF_STMT(BPF_LD | BPF_IND | BPF_H, -0x3f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5659) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5660) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5661) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5662) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5663) { {0x3f, 0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5664) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5665) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5666) "LD_IND word positive offset",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5667) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5668) BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5669) BPF_STMT(BPF_LD | BPF_IND | BPF_W, 0x4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5670) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5671) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5672) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5673) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5674) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5675) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5676) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5677) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5678) [0x24] = 0xee, [0x25] = 0x99,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5679) [0x26] = 0xff, [0x27] = 0xaa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5680) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5681) { {0x40, 0xee99ffaa } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5682) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5683) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5684) "LD_IND word negative offset",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5685) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5686) BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5687) BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5688) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5689) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5690) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5691) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5692) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5693) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5694) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5695) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5696) [0x24] = 0xee, [0x25] = 0x99,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5697) [0x26] = 0xff, [0x27] = 0xaa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5698) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5699) { {0x40, 0xaa55bb66 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5700) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5701) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5702) "LD_IND word unaligned (addr & 3 == 2)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5703) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5704) BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5705) BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5706) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5707) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5708) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5709) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5710) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5711) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5712) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5713) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5714) [0x24] = 0xee, [0x25] = 0x99,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5715) [0x26] = 0xff, [0x27] = 0xaa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5716) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5717) { {0x40, 0xbb66cc77 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5718) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5719) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5720) "LD_IND word unaligned (addr & 3 == 1)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5721) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5722) BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5723) BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5724) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5725) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5726) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5727) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5728) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5729) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5730) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5731) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5732) [0x24] = 0xee, [0x25] = 0x99,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5733) [0x26] = 0xff, [0x27] = 0xaa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5734) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5735) { {0x40, 0x55bb66cc } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5736) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5737) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5738) "LD_IND word unaligned (addr & 3 == 3)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5739) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5740) BPF_STMT(BPF_LDX | BPF_IMM, 0x20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5741) BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5742) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5743) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5744) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5745) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5746) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5747) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5748) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5749) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5750) [0x24] = 0xee, [0x25] = 0x99,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5751) [0x26] = 0xff, [0x27] = 0xaa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5752) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5753) { {0x40, 0x66cc77dd } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5754) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5755) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5756) "LD_IND word positive offset, all ff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5757) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5758) BPF_STMT(BPF_LDX | BPF_IMM, 0x3b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5759) BPF_STMT(BPF_LD | BPF_IND | BPF_W, 0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5760) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5761) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5762) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5763) { [0x3c] = 0xff, [0x3d] = 0xff, [0x3e] = 0xff, [0x3f] = 0xff },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5764) { {0x40, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5765) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5766) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5767) "LD_IND word positive offset, out of bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5768) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5769) BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5770) BPF_STMT(BPF_LD | BPF_IND | BPF_W, 0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5771) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5772) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5773) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5774) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5775) { {0x3f, 0 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5776) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5777) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5778) "LD_IND word negative offset, out of bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5779) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5780) BPF_STMT(BPF_LDX | BPF_IMM, 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5781) BPF_STMT(BPF_LD | BPF_IND | BPF_W, -0x3f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5782) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5783) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5784) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5785) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5786) { {0x3f, 0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5787) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5788) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5789) "LD_ABS byte",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5790) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5791) BPF_STMT(BPF_LD | BPF_ABS | BPF_B, 0x20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5792) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5793) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5794) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5795) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5796) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5797) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5798) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5799) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5800) [0x24] = 0xee, [0x25] = 0x99,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5801) [0x26] = 0xff, [0x27] = 0xaa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5802) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5803) { {0x40, 0xcc } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5804) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5805) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5806) "LD_ABS byte positive offset, all ff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5807) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5808) BPF_STMT(BPF_LD | BPF_ABS | BPF_B, 0x3f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5809) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5810) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5811) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5812) { [0x3c] = 0xff, [0x3d] = 0xff, [0x3e] = 0xff, [0x3f] = 0xff },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5813) { {0x40, 0xff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5814) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5815) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5816) "LD_ABS byte positive offset, out of bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5817) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5818) BPF_STMT(BPF_LD | BPF_ABS | BPF_B, 0x3f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5819) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5820) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5821) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5822) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5823) { {0x3f, 0 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5824) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5825) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5826) "LD_ABS byte negative offset, out of bounds load",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5827) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5828) BPF_STMT(BPF_LD | BPF_ABS | BPF_B, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5829) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5830) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5831) CLASSIC | FLAG_EXPECTED_FAIL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5832) .expected_errcode = -EINVAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5833) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5834) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5835) "LD_ABS byte negative offset, in bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5836) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5837) BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5838) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5839) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5840) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5841) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5842) { {0x40, 0x82 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5843) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5844) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5845) "LD_ABS byte negative offset, out of bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5846) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5847) BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5848) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5849) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5850) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5851) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5852) { {0x3f, 0 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5853) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5854) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5855) "LD_ABS byte negative offset, multiple calls",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5856) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5857) BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3c),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5858) BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3d),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5859) BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5860) BPF_STMT(BPF_LD | BPF_ABS | BPF_B, SKF_LL_OFF + 0x3f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5861) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5862) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5863) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5864) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5865) { {0x40, 0x82 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5866) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5867) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5868) "LD_ABS halfword",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5869) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5870) BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x22),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5871) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5872) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5873) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5874) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5875) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5876) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5877) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5878) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5879) [0x24] = 0xee, [0x25] = 0x99,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5880) [0x26] = 0xff, [0x27] = 0xaa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5881) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5882) { {0x40, 0xdd88 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5883) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5884) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5885) "LD_ABS halfword unaligned",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5886) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5887) BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x25),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5888) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5889) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5890) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5891) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5892) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5893) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5894) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5895) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5896) [0x24] = 0xee, [0x25] = 0x99,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5897) [0x26] = 0xff, [0x27] = 0xaa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5898) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5899) { {0x40, 0x99ff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5900) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5901) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5902) "LD_ABS halfword positive offset, all ff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5903) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5904) BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5905) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5906) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5907) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5908) { [0x3c] = 0xff, [0x3d] = 0xff, [0x3e] = 0xff, [0x3f] = 0xff },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5909) { {0x40, 0xffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5910) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5911) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5912) "LD_ABS halfword positive offset, out of bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5913) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5914) BPF_STMT(BPF_LD | BPF_ABS | BPF_H, 0x3f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5915) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5916) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5917) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5918) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5919) { {0x3f, 0 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5920) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5921) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5922) "LD_ABS halfword negative offset, out of bounds load",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5923) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5924) BPF_STMT(BPF_LD | BPF_ABS | BPF_H, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5925) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5926) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5927) CLASSIC | FLAG_EXPECTED_FAIL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5928) .expected_errcode = -EINVAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5929) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5930) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5931) "LD_ABS halfword negative offset, in bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5932) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5933) BPF_STMT(BPF_LD | BPF_ABS | BPF_H, SKF_LL_OFF + 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5934) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5935) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5936) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5937) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5938) { {0x40, 0x1982 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5939) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5940) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5941) "LD_ABS halfword negative offset, out of bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5942) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5943) BPF_STMT(BPF_LD | BPF_ABS | BPF_H, SKF_LL_OFF + 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5944) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5945) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5946) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5947) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5948) { {0x3f, 0 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5949) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5950) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5951) "LD_ABS word",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5952) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5953) BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x1c),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5954) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5955) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5956) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5957) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5958) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5959) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5960) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5961) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5962) [0x24] = 0xee, [0x25] = 0x99,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5963) [0x26] = 0xff, [0x27] = 0xaa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5964) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5965) { {0x40, 0xaa55bb66 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5966) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5967) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5968) "LD_ABS word unaligned (addr & 3 == 2)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5969) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5970) BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x22),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5971) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5972) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5973) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5974) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5975) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5976) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5977) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5978) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5979) [0x24] = 0xee, [0x25] = 0x99,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5980) [0x26] = 0xff, [0x27] = 0xaa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5981) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5982) { {0x40, 0xdd88ee99 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5983) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5984) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5985) "LD_ABS word unaligned (addr & 3 == 1)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5986) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5987) BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x21),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5988) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5989) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5990) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5991) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5992) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5993) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5994) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5995) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5996) [0x24] = 0xee, [0x25] = 0x99,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5997) [0x26] = 0xff, [0x27] = 0xaa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5998) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5999) { {0x40, 0x77dd88ee } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6000) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6001) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6002) "LD_ABS word unaligned (addr & 3 == 3)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6003) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6004) BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x23),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6005) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6006) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6007) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6008) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6009) [0x1c] = 0xaa, [0x1d] = 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6010) [0x1e] = 0xbb, [0x1f] = 0x66,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6011) [0x20] = 0xcc, [0x21] = 0x77,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6012) [0x22] = 0xdd, [0x23] = 0x88,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6013) [0x24] = 0xee, [0x25] = 0x99,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6014) [0x26] = 0xff, [0x27] = 0xaa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6015) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6016) { {0x40, 0x88ee99ff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6017) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6018) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6019) "LD_ABS word positive offset, all ff",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6020) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6021) BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x3c),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6022) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6023) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6024) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6025) { [0x3c] = 0xff, [0x3d] = 0xff, [0x3e] = 0xff, [0x3f] = 0xff },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6026) { {0x40, 0xffffffff } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6027) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6028) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6029) "LD_ABS word positive offset, out of bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6030) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6031) BPF_STMT(BPF_LD | BPF_ABS | BPF_W, 0x3f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6032) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6033) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6034) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6035) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6036) { {0x3f, 0 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6037) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6038) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6039) "LD_ABS word negative offset, out of bounds load",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6040) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6041) BPF_STMT(BPF_LD | BPF_ABS | BPF_W, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6042) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6043) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6044) CLASSIC | FLAG_EXPECTED_FAIL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6045) .expected_errcode = -EINVAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6046) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6047) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6048) "LD_ABS word negative offset, in bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6049) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6050) BPF_STMT(BPF_LD | BPF_ABS | BPF_W, SKF_LL_OFF + 0x3c),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6051) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6052) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6053) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6054) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6055) { {0x40, 0x25051982 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6056) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6057) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6058) "LD_ABS word negative offset, out of bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6059) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6060) BPF_STMT(BPF_LD | BPF_ABS | BPF_W, SKF_LL_OFF + 0x3c),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6061) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6062) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6063) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6064) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6065) { {0x3f, 0 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6066) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6067) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6068) "LDX_MSH standalone, preserved A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6069) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6070) BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6071) BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3c),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6072) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6073) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6074) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6075) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6076) { {0x40, 0xffeebbaa }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6077) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6078) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6079) "LDX_MSH standalone, preserved A 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6080) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6081) BPF_STMT(BPF_LD | BPF_IMM, 0x175e9d63),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6082) BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3c),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6083) BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3d),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6084) BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6085) BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6086) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6087) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6088) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6089) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6090) { {0x40, 0x175e9d63 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6091) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6092) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6093) "LDX_MSH standalone, test result 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6094) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6095) BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6096) BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3c),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6097) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6098) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6099) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6100) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6101) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6102) { {0x40, 0x14 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6103) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6104) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6105) "LDX_MSH standalone, test result 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6106) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6107) BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6108) BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6109) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6110) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6111) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6112) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6113) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6114) { {0x40, 0x24 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6115) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6116) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6117) "LDX_MSH standalone, negative offset",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6118) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6119) BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6120) BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, -1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6121) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6122) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6123) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6124) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6125) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6126) { {0x40, 0 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6127) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6128) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6129) "LDX_MSH standalone, negative offset 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6130) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6131) BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6132) BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, SKF_LL_OFF + 0x3e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6133) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6134) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6135) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6136) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6137) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6138) { {0x40, 0x24 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6139) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6140) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6141) "LDX_MSH standalone, out of bounds",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6142) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6143) BPF_STMT(BPF_LD | BPF_IMM, 0xffeebbaa),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6144) BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 0x40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6145) BPF_STMT(BPF_MISC | BPF_TXA, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6146) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6147) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6148) CLASSIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6149) { [0x3c] = 0x25, [0x3d] = 0x05, [0x3e] = 0x19, [0x3f] = 0x82 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6150) { {0x40, 0 }, },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6151) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6152) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6153) * verify that the interpreter or JIT correctly sets A and X
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6154) * to 0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6155) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6156) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6157) "ADD default X",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6158) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6159) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6160) * A = 0x42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6161) * A = A + X
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6162) * ret A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6163) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6164) BPF_STMT(BPF_LD | BPF_IMM, 0x42),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6165) BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6166) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6167) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6168) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6169) {},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6170) { {0x1, 0x42 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6171) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6172) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6173) "ADD default A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6174) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6175) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6176) * A = A + 0x42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6177) * ret A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6178) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6179) BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 0x42),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6180) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6181) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6182) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6183) {},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6184) { {0x1, 0x42 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6185) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6186) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6187) "SUB default X",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6188) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6189) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6190) * A = 0x66
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6191) * A = A - X
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6192) * ret A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6193) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6194) BPF_STMT(BPF_LD | BPF_IMM, 0x66),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6195) BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6196) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6197) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6198) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6199) {},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6200) { {0x1, 0x66 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6201) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6202) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6203) "SUB default A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6204) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6205) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6206) * A = A - -0x66
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6207) * ret A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6208) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6209) BPF_STMT(BPF_ALU | BPF_SUB | BPF_K, -0x66),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6210) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6211) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6212) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6213) {},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6214) { {0x1, 0x66 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6215) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6216) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6217) "MUL default X",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6218) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6219) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6220) * A = 0x42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6221) * A = A * X
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6222) * ret A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6223) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6224) BPF_STMT(BPF_LD | BPF_IMM, 0x42),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6225) BPF_STMT(BPF_ALU | BPF_MUL | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6226) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6227) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6228) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6229) {},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6230) { {0x1, 0x0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6231) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6232) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6233) "MUL default A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6234) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6235) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6236) * A = A * 0x66
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6237) * ret A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6238) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6239) BPF_STMT(BPF_ALU | BPF_MUL | BPF_K, 0x66),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6240) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6241) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6242) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6243) {},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6244) { {0x1, 0x0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6245) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6246) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6247) "DIV default X",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6248) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6249) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6250) * A = 0x42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6251) * A = A / X ; this halt the filter execution if X is 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6252) * ret 0x42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6253) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6254) BPF_STMT(BPF_LD | BPF_IMM, 0x42),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6255) BPF_STMT(BPF_ALU | BPF_DIV | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6256) BPF_STMT(BPF_RET | BPF_K, 0x42),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6257) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6258) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6259) {},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6260) { {0x1, 0x0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6261) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6262) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6263) "DIV default A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6264) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6265) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6266) * A = A / 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6267) * ret A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6268) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6269) BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6270) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6271) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6272) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6273) {},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6274) { {0x1, 0x0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6275) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6276) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6277) "MOD default X",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6278) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6279) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6280) * A = 0x42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6281) * A = A mod X ; this halt the filter execution if X is 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6282) * ret 0x42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6283) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6284) BPF_STMT(BPF_LD | BPF_IMM, 0x42),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6285) BPF_STMT(BPF_ALU | BPF_MOD | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6286) BPF_STMT(BPF_RET | BPF_K, 0x42),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6287) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6288) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6289) {},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6290) { {0x1, 0x0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6291) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6292) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6293) "MOD default A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6294) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6295) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6296) * A = A mod 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6297) * ret A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6298) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6299) BPF_STMT(BPF_ALU | BPF_MOD | BPF_K, 0x1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6300) BPF_STMT(BPF_RET | BPF_A, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6301) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6302) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6303) {},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6304) { {0x1, 0x0 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6305) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6306) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6307) "JMP EQ default A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6308) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6309) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6310) * cmp A, 0x0, 0, 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6311) * ret 0x42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6312) * ret 0x66
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6313) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6314) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x0, 0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6315) BPF_STMT(BPF_RET | BPF_K, 0x42),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6316) BPF_STMT(BPF_RET | BPF_K, 0x66),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6317) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6318) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6319) {},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6320) { {0x1, 0x42 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6321) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6322) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6323) "JMP EQ default X",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6324) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6325) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6326) * A = 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6327) * cmp A, X, 0, 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6328) * ret 0x42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6329) * ret 0x66
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6330) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6331) BPF_STMT(BPF_LD | BPF_IMM, 0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6332) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_X, 0x0, 0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6333) BPF_STMT(BPF_RET | BPF_K, 0x42),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6334) BPF_STMT(BPF_RET | BPF_K, 0x66),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6335) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6336) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6337) {},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6338) { {0x1, 0x42 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6339) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6340) /* Checking interpreter vs JIT wrt signed extended imms. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6341) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6342) "JNE signed compare, test 1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6343) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6344) BPF_ALU32_IMM(BPF_MOV, R1, 0xfefbbc12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6345) BPF_ALU32_IMM(BPF_MOV, R3, 0xffff0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6346) BPF_MOV64_REG(R2, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6347) BPF_ALU64_REG(BPF_AND, R2, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6348) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6349) BPF_JMP_IMM(BPF_JNE, R2, -17104896, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6350) BPF_ALU32_IMM(BPF_MOV, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6351) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6352) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6353) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6354) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6355) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6356) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6357) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6358) "JNE signed compare, test 2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6359) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6360) BPF_ALU32_IMM(BPF_MOV, R1, 0xfefbbc12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6361) BPF_ALU32_IMM(BPF_MOV, R3, 0xffff0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6362) BPF_MOV64_REG(R2, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6363) BPF_ALU64_REG(BPF_AND, R2, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6364) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6365) BPF_JMP_IMM(BPF_JNE, R2, 0xfefb0000, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6366) BPF_ALU32_IMM(BPF_MOV, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6367) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6368) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6369) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6370) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6371) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6372) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6373) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6374) "JNE signed compare, test 3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6375) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6376) BPF_ALU32_IMM(BPF_MOV, R1, 0xfefbbc12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6377) BPF_ALU32_IMM(BPF_MOV, R3, 0xffff0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6378) BPF_ALU32_IMM(BPF_MOV, R4, 0xfefb0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6379) BPF_MOV64_REG(R2, R1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6380) BPF_ALU64_REG(BPF_AND, R2, R3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6381) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6382) BPF_JMP_REG(BPF_JNE, R2, R4, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6383) BPF_ALU32_IMM(BPF_MOV, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6384) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6385) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6386) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6387) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6388) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6389) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6390) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6391) "JNE signed compare, test 4",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6392) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6393) BPF_LD_IMM64(R1, -17104896),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6394) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6395) BPF_JMP_IMM(BPF_JNE, R1, -17104896, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6396) BPF_ALU32_IMM(BPF_MOV, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6397) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6398) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6399) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6400) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6401) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6402) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6403) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6404) "JNE signed compare, test 5",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6405) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6406) BPF_LD_IMM64(R1, 0xfefb0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6407) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6408) BPF_JMP_IMM(BPF_JNE, R1, 0xfefb0000, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6409) BPF_ALU32_IMM(BPF_MOV, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6410) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6411) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6412) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6413) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6414) { { 0, 1 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6415) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6416) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6417) "JNE signed compare, test 6",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6418) .u.insns_int = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6419) BPF_LD_IMM64(R1, 0x7efb0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6420) BPF_ALU32_IMM(BPF_MOV, R0, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6421) BPF_JMP_IMM(BPF_JNE, R1, 0x7efb0000, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6422) BPF_ALU32_IMM(BPF_MOV, R0, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6423) BPF_EXIT_INSN(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6424) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6425) INTERNAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6426) { },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6427) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6428) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6429) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6430) "JNE signed compare, test 7",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6431) .u.insns = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6432) BPF_STMT(BPF_LD | BPF_IMM, 0xffff0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6433) BPF_STMT(BPF_MISC | BPF_TAX, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6434) BPF_STMT(BPF_LD | BPF_IMM, 0xfefbbc12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6435) BPF_STMT(BPF_ALU | BPF_AND | BPF_X, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6436) BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0xfefb0000, 1, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6437) BPF_STMT(BPF_RET | BPF_K, 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6438) BPF_STMT(BPF_RET | BPF_K, 2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6439) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6440) CLASSIC | FLAG_NO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6441) {},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6442) { { 0, 2 } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6443) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6444) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6445)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6446) static struct net_device dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6447)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6448) static struct sk_buff *populate_skb(char *buf, int size)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6449) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6450) struct sk_buff *skb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6451)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6452) if (size >= MAX_DATA)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6453) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6454)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6455) skb = alloc_skb(MAX_DATA, GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6456) if (!skb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6457) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6458)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6459) __skb_put_data(skb, buf, size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6460)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6461) /* Initialize a fake skb with test pattern. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6462) skb_reset_mac_header(skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6463) skb->protocol = htons(ETH_P_IP);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6464) skb->pkt_type = SKB_TYPE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6465) skb->mark = SKB_MARK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6466) skb->hash = SKB_HASH;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6467) skb->queue_mapping = SKB_QUEUE_MAP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6468) skb->vlan_tci = SKB_VLAN_TCI;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6469) skb->vlan_present = SKB_VLAN_PRESENT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6470) skb->vlan_proto = htons(ETH_P_IP);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6471) dev_net_set(&dev, &init_net);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6472) skb->dev = &dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6473) skb->dev->ifindex = SKB_DEV_IFINDEX;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6474) skb->dev->type = SKB_DEV_TYPE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6475) skb_set_network_header(skb, min(size, ETH_HLEN));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6476)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6477) return skb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6478) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6479)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6480) static void *generate_test_data(struct bpf_test *test, int sub)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6481) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6482) struct sk_buff *skb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6483) struct page *page;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6484)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6485) if (test->aux & FLAG_NO_DATA)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6486) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6487)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6488) /* Test case expects an skb, so populate one. Various
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6489) * subtests generate skbs of different sizes based on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6490) * the same data.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6491) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6492) skb = populate_skb(test->data, test->test[sub].data_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6493) if (!skb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6494) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6495)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6496) if (test->aux & FLAG_SKB_FRAG) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6497) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6498) * when the test requires a fragmented skb, add a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6499) * single fragment to the skb, filled with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6500) * test->frag_data.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6501) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6502) void *ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6503)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6504) page = alloc_page(GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6505)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6506) if (!page)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6507) goto err_kfree_skb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6508)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6509) ptr = kmap(page);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6510) if (!ptr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6511) goto err_free_page;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6512) memcpy(ptr, test->frag_data, MAX_DATA);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6513) kunmap(page);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6514) skb_add_rx_frag(skb, 0, page, 0, MAX_DATA, MAX_DATA);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6515) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6516)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6517) return skb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6518)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6519) err_free_page:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6520) __free_page(page);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6521) err_kfree_skb:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6522) kfree_skb(skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6523) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6524) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6525)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6526) static void release_test_data(const struct bpf_test *test, void *data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6527) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6528) if (test->aux & FLAG_NO_DATA)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6529) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6530)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6531) kfree_skb(data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6532) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6533)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6534) static int filter_length(int which)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6535) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6536) struct sock_filter *fp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6537) int len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6538)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6539) if (tests[which].fill_helper)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6540) return tests[which].u.ptr.len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6541)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6542) fp = tests[which].u.insns;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6543) for (len = MAX_INSNS - 1; len > 0; --len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6544) if (fp[len].code != 0 || fp[len].k != 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6545) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6546)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6547) return len + 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6548) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6549)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6550) static void *filter_pointer(int which)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6551) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6552) if (tests[which].fill_helper)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6553) return tests[which].u.ptr.insns;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6554) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6555) return tests[which].u.insns;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6556) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6557)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6558) static struct bpf_prog *generate_filter(int which, int *err)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6559) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6560) __u8 test_type = tests[which].aux & TEST_TYPE_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6561) unsigned int flen = filter_length(which);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6562) void *fptr = filter_pointer(which);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6563) struct sock_fprog_kern fprog;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6564) struct bpf_prog *fp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6565)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6566) switch (test_type) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6567) case CLASSIC:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6568) fprog.filter = fptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6569) fprog.len = flen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6570)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6571) *err = bpf_prog_create(&fp, &fprog);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6572) if (tests[which].aux & FLAG_EXPECTED_FAIL) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6573) if (*err == tests[which].expected_errcode) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6574) pr_cont("PASS\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6575) /* Verifier rejected filter as expected. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6576) *err = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6577) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6578) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6579) pr_cont("UNEXPECTED_PASS\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6580) /* Verifier didn't reject the test that's
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6581) * bad enough, just return!
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6582) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6583) *err = -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6584) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6585) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6586) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6587) if (*err) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6588) pr_cont("FAIL to prog_create err=%d len=%d\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6589) *err, fprog.len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6590) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6591) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6592) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6593)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6594) case INTERNAL:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6595) fp = bpf_prog_alloc(bpf_prog_size(flen), 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6596) if (fp == NULL) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6597) pr_cont("UNEXPECTED_FAIL no memory left\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6598) *err = -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6599) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6600) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6601)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6602) fp->len = flen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6603) /* Type doesn't really matter here as long as it's not unspec. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6604) fp->type = BPF_PROG_TYPE_SOCKET_FILTER;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6605) memcpy(fp->insnsi, fptr, fp->len * sizeof(struct bpf_insn));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6606) fp->aux->stack_depth = tests[which].stack_depth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6607)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6608) /* We cannot error here as we don't need type compatibility
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6609) * checks.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6610) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6611) fp = bpf_prog_select_runtime(fp, err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6612) if (*err) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6613) pr_cont("FAIL to select_runtime err=%d\n", *err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6614) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6615) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6616) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6617) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6618)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6619) *err = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6620) return fp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6621) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6622)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6623) static void release_filter(struct bpf_prog *fp, int which)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6624) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6625) __u8 test_type = tests[which].aux & TEST_TYPE_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6626)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6627) switch (test_type) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6628) case CLASSIC:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6629) bpf_prog_destroy(fp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6630) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6631) case INTERNAL:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6632) bpf_prog_free(fp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6633) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6634) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6635) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6636)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6637) static int __run_one(const struct bpf_prog *fp, const void *data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6638) int runs, u64 *duration)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6639) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6640) u64 start, finish;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6641) int ret = 0, i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6642)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6643) migrate_disable();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6644) start = ktime_get_ns();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6645)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6646) for (i = 0; i < runs; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6647) ret = BPF_PROG_RUN(fp, data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6648)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6649) finish = ktime_get_ns();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6650) migrate_enable();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6651)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6652) *duration = finish - start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6653) do_div(*duration, runs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6654)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6655) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6656) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6657)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6658) static int run_one(const struct bpf_prog *fp, struct bpf_test *test)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6659) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6660) int err_cnt = 0, i, runs = MAX_TESTRUNS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6661)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6662) for (i = 0; i < MAX_SUBTESTS; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6663) void *data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6664) u64 duration;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6665) u32 ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6666)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6667) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6668) * NOTE: Several sub-tests may be present, in which case
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6669) * a zero {data_size, result} tuple indicates the end of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6670) * the sub-test array. The first test is always run,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6671) * even if both data_size and result happen to be zero.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6672) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6673) if (i > 0 &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6674) test->test[i].data_size == 0 &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6675) test->test[i].result == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6676) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6677)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6678) data = generate_test_data(test, i);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6679) if (!data && !(test->aux & FLAG_NO_DATA)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6680) pr_cont("data generation failed ");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6681) err_cnt++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6682) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6683) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6684) ret = __run_one(fp, data, runs, &duration);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6685) release_test_data(test, data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6686)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6687) if (ret == test->test[i].result) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6688) pr_cont("%lld ", duration);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6689) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6690) pr_cont("ret %d != %d ", ret,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6691) test->test[i].result);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6692) err_cnt++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6693) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6694) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6695)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6696) return err_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6697) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6698)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6699) static char test_name[64];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6700) module_param_string(test_name, test_name, sizeof(test_name), 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6701)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6702) static int test_id = -1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6703) module_param(test_id, int, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6704)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6705) static int test_range[2] = { 0, ARRAY_SIZE(tests) - 1 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6706) module_param_array(test_range, int, NULL, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6707)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6708) static __init int find_test_index(const char *test_name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6709) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6710) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6711)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6712) for (i = 0; i < ARRAY_SIZE(tests); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6713) if (!strcmp(tests[i].descr, test_name))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6714) return i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6715) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6716) return -1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6717) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6718)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6719) static __init int prepare_bpf_tests(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6720) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6721) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6722)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6723) if (test_id >= 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6724) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6725) * if a test_id was specified, use test_range to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6726) * cover only that test.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6727) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6728) if (test_id >= ARRAY_SIZE(tests)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6729) pr_err("test_bpf: invalid test_id specified.\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6730) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6731) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6732)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6733) test_range[0] = test_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6734) test_range[1] = test_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6735) } else if (*test_name) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6736) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6737) * if a test_name was specified, find it and setup
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6738) * test_range to cover only that test.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6739) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6740) int idx = find_test_index(test_name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6741)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6742) if (idx < 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6743) pr_err("test_bpf: no test named '%s' found.\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6744) test_name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6745) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6746) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6747) test_range[0] = idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6748) test_range[1] = idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6749) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6750) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6751) * check that the supplied test_range is valid.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6752) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6753) if (test_range[0] >= ARRAY_SIZE(tests) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6754) test_range[1] >= ARRAY_SIZE(tests) ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6755) test_range[0] < 0 || test_range[1] < 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6756) pr_err("test_bpf: test_range is out of bound.\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6757) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6758) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6759)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6760) if (test_range[1] < test_range[0]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6761) pr_err("test_bpf: test_range is ending before it starts.\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6762) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6763) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6764) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6765)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6766) for (i = 0; i < ARRAY_SIZE(tests); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6767) if (tests[i].fill_helper &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6768) tests[i].fill_helper(&tests[i]) < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6769) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6770) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6771)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6772) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6773) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6774)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6775) static __init void destroy_bpf_tests(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6776) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6777) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6778)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6779) for (i = 0; i < ARRAY_SIZE(tests); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6780) if (tests[i].fill_helper)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6781) kfree(tests[i].u.ptr.insns);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6782) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6783) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6784)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6785) static bool exclude_test(int test_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6786) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6787) return test_id < test_range[0] || test_id > test_range[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6788) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6789)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6790) static __init struct sk_buff *build_test_skb(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6791) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6792) u32 headroom = NET_SKB_PAD + NET_IP_ALIGN + ETH_HLEN;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6793) struct sk_buff *skb[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6794) struct page *page[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6795) int i, data_size = 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6796)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6797) for (i = 0; i < 2; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6798) page[i] = alloc_page(GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6799) if (!page[i]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6800) if (i == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6801) goto err_page0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6802) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6803) goto err_page1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6804) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6805)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6806) /* this will set skb[i]->head_frag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6807) skb[i] = dev_alloc_skb(headroom + data_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6808) if (!skb[i]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6809) if (i == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6810) goto err_skb0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6811) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6812) goto err_skb1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6813) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6814)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6815) skb_reserve(skb[i], headroom);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6816) skb_put(skb[i], data_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6817) skb[i]->protocol = htons(ETH_P_IP);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6818) skb_reset_network_header(skb[i]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6819) skb_set_mac_header(skb[i], -ETH_HLEN);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6820)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6821) skb_add_rx_frag(skb[i], 0, page[i], 0, 64, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6822) // skb_headlen(skb[i]): 8, skb[i]->head_frag = 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6823) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6824)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6825) /* setup shinfo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6826) skb_shinfo(skb[0])->gso_size = 1448;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6827) skb_shinfo(skb[0])->gso_type = SKB_GSO_TCPV4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6828) skb_shinfo(skb[0])->gso_type |= SKB_GSO_DODGY;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6829) skb_shinfo(skb[0])->gso_segs = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6830) skb_shinfo(skb[0])->frag_list = skb[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6831)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6832) /* adjust skb[0]'s len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6833) skb[0]->len += skb[1]->len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6834) skb[0]->data_len += skb[1]->data_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6835) skb[0]->truesize += skb[1]->truesize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6836)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6837) return skb[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6838)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6839) err_skb1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6840) __free_page(page[1]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6841) err_page1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6842) kfree_skb(skb[0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6843) err_skb0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6844) __free_page(page[0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6845) err_page0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6846) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6847) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6848)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6849) static __init struct sk_buff *build_test_skb_linear_no_head_frag(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6850) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6851) unsigned int alloc_size = 2000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6852) unsigned int headroom = 102, doffset = 72, data_size = 1308;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6853) struct sk_buff *skb[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6854) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6855)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6856) /* skbs linked in a frag_list, both with linear data, with head_frag=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6857) * (data allocated by kmalloc), both have tcp data of 1308 bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6858) * (total payload is 2616 bytes).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6859) * Data offset is 72 bytes (40 ipv6 hdr, 32 tcp hdr). Some headroom.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6860) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6861) for (i = 0; i < 2; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6862) skb[i] = alloc_skb(alloc_size, GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6863) if (!skb[i]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6864) if (i == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6865) goto err_skb0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6866) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6867) goto err_skb1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6868) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6869)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6870) skb[i]->protocol = htons(ETH_P_IPV6);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6871) skb_reserve(skb[i], headroom);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6872) skb_put(skb[i], doffset + data_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6873) skb_reset_network_header(skb[i]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6874) if (i == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6875) skb_reset_mac_header(skb[i]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6876) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6877) skb_set_mac_header(skb[i], -ETH_HLEN);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6878) __skb_pull(skb[i], doffset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6879) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6880)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6881) /* setup shinfo.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6882) * mimic bpf_skb_proto_4_to_6, which resets gso_segs and assigns a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6883) * reduced gso_size.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6884) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6885) skb_shinfo(skb[0])->gso_size = 1288;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6886) skb_shinfo(skb[0])->gso_type = SKB_GSO_TCPV6 | SKB_GSO_DODGY;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6887) skb_shinfo(skb[0])->gso_segs = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6888) skb_shinfo(skb[0])->frag_list = skb[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6889)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6890) /* adjust skb[0]'s len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6891) skb[0]->len += skb[1]->len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6892) skb[0]->data_len += skb[1]->len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6893) skb[0]->truesize += skb[1]->truesize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6894)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6895) return skb[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6896)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6897) err_skb1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6898) kfree_skb(skb[0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6899) err_skb0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6900) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6901) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6902)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6903) struct skb_segment_test {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6904) const char *descr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6905) struct sk_buff *(*build_skb)(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6906) netdev_features_t features;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6907) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6908)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6909) static struct skb_segment_test skb_segment_tests[] __initconst = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6910) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6911) .descr = "gso_with_rx_frags",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6912) .build_skb = build_test_skb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6913) .features = NETIF_F_SG | NETIF_F_GSO_PARTIAL | NETIF_F_IP_CSUM |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6914) NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6915) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6916) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6917) .descr = "gso_linear_no_head_frag",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6918) .build_skb = build_test_skb_linear_no_head_frag,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6919) .features = NETIF_F_SG | NETIF_F_FRAGLIST |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6920) NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_GSO |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6921) NETIF_F_LLTX_BIT | NETIF_F_GRO |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6922) NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6923) NETIF_F_HW_VLAN_STAG_TX_BIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6924) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6925) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6926)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6927) static __init int test_skb_segment_single(const struct skb_segment_test *test)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6928) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6929) struct sk_buff *skb, *segs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6930) int ret = -1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6931)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6932) skb = test->build_skb();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6933) if (!skb) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6934) pr_info("%s: failed to build_test_skb", __func__);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6935) goto done;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6936) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6937)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6938) segs = skb_segment(skb, test->features);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6939) if (!IS_ERR(segs)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6940) kfree_skb_list(segs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6941) ret = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6942) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6943) kfree_skb(skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6944) done:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6945) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6946) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6947)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6948) static __init int test_skb_segment(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6949) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6950) int i, err_cnt = 0, pass_cnt = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6951)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6952) for (i = 0; i < ARRAY_SIZE(skb_segment_tests); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6953) const struct skb_segment_test *test = &skb_segment_tests[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6954)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6955) pr_info("#%d %s ", i, test->descr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6956)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6957) if (test_skb_segment_single(test)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6958) pr_cont("FAIL\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6959) err_cnt++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6960) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6961) pr_cont("PASS\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6962) pass_cnt++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6963) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6964) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6965)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6966) pr_info("%s: Summary: %d PASSED, %d FAILED\n", __func__,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6967) pass_cnt, err_cnt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6968) return err_cnt ? -EINVAL : 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6969) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6970)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6971) static __init int test_bpf(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6972) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6973) int i, err_cnt = 0, pass_cnt = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6974) int jit_cnt = 0, run_cnt = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6975)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6976) for (i = 0; i < ARRAY_SIZE(tests); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6977) struct bpf_prog *fp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6978) int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6979)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6980) cond_resched();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6981) if (exclude_test(i))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6982) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6983)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6984) pr_info("#%d %s ", i, tests[i].descr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6985)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6986) fp = generate_filter(i, &err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6987) if (fp == NULL) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6988) if (err == 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6989) pass_cnt++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6990) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6991) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6992) err_cnt++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6993) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6994) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6995)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6996) pr_cont("jited:%u ", fp->jited);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6997)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6998) run_cnt++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6999) if (fp->jited)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7000) jit_cnt++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7001)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7002) err = run_one(fp, &tests[i]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7003) release_filter(fp, i);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7004)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7005) if (err) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7006) pr_cont("FAIL (%d times)\n", err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7007) err_cnt++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7008) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7009) pr_cont("PASS\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7010) pass_cnt++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7011) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7012) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7013)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7014) pr_info("Summary: %d PASSED, %d FAILED, [%d/%d JIT'ed]\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7015) pass_cnt, err_cnt, jit_cnt, run_cnt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7016)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7017) return err_cnt ? -EINVAL : 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7018) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7019)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7020) static int __init test_bpf_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7021) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7022) int ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7023)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7024) ret = prepare_bpf_tests();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7025) if (ret < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7026) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7027)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7028) ret = test_bpf();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7029) destroy_bpf_tests();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7030) if (ret)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7031) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7032)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7033) return test_skb_segment();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7034) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7035)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7036) static void __exit test_bpf_exit(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7037) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7038) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7039)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7040) module_init(test_bpf_init);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7041) module_exit(test_bpf_exit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7042)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7043) MODULE_LICENSE("GPL");