1 { 2 "direct packet read test#1 for CGROUP_SKB", 3 .insns = { 4 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 5 offsetof(struct __sk_buff, data)), 6 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, 7 offsetof(struct __sk_buff, data_end)), 8 BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1, 9 offsetof(struct __sk_buff, len)), 10 BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1, 11 offsetof(struct __sk_buff, pkt_type)), 12 BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1, 13 offsetof(struct __sk_buff, mark)), 14 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_6, 15 offsetof(struct __sk_buff, mark)), 16 BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1, 17 offsetof(struct __sk_buff, queue_mapping)), 18 BPF_LDX_MEM(BPF_W, BPF_REG_8, BPF_REG_1, 19 offsetof(struct __sk_buff, protocol)), 20 BPF_LDX_MEM(BPF_W, BPF_REG_9, BPF_REG_1, 21 offsetof(struct __sk_buff, vlan_present)), 22 BPF_MOV64_REG(BPF_REG_0, BPF_REG_2), 23 BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8), 24 BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1), 25 BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0), 26 BPF_MOV64_IMM(BPF_REG_0, 0), 27 BPF_EXIT_INSN(), 28 }, 29 .result = ACCEPT, 30 .result_unpriv = REJECT, 31 .errstr_unpriv = "invalid bpf_context access off=76 size=4", 32 .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 33 }, 34 { 35 "direct packet read test#2 for CGROUP_SKB", 36 .insns = { 37 BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1, 38 offsetof(struct __sk_buff, vlan_tci)), 39 BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1, 40 offsetof(struct __sk_buff, vlan_proto)), 41 BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1, 42 offsetof(struct __sk_buff, priority)), 43 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_6, 44 offsetof(struct __sk_buff, priority)), 45 BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1, 46 offsetof(struct __sk_buff, ingress_ifindex)), 47 BPF_LDX_MEM(BPF_W, BPF_REG_8, BPF_REG_1, 48 offsetof(struct __sk_buff, tc_index)), 49 BPF_LDX_MEM(BPF_W, BPF_REG_9, BPF_REG_1, 50 offsetof(struct __sk_buff, hash)), 51 BPF_MOV64_IMM(BPF_REG_0, 0), 52 BPF_EXIT_INSN(), 53 }, 54 .result = ACCEPT, 55 .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 56 }, 57 { 58 "direct packet read test#3 for CGROUP_SKB", 59 .insns = { 60 BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1, 61 offsetof(struct __sk_buff, cb[0])), 62 BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1, 63 offsetof(struct __sk_buff, cb[1])), 64 BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1, 65 offsetof(struct __sk_buff, cb[2])), 66 BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1, 67 offsetof(struct __sk_buff, cb[3])), 68 BPF_LDX_MEM(BPF_W, BPF_REG_8, BPF_REG_1, 69 offsetof(struct __sk_buff, cb[4])), 70 BPF_LDX_MEM(BPF_W, BPF_REG_9, BPF_REG_1, 71 offsetof(struct __sk_buff, napi_id)), 72 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_4, 73 offsetof(struct __sk_buff, cb[0])), 74 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_5, 75 offsetof(struct __sk_buff, cb[1])), 76 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_6, 77 offsetof(struct __sk_buff, cb[2])), 78 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_7, 79 offsetof(struct __sk_buff, cb[3])), 80 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_8, 81 offsetof(struct __sk_buff, cb[4])), 82 BPF_MOV64_IMM(BPF_REG_0, 0), 83 BPF_EXIT_INSN(), 84 }, 85 .result = ACCEPT, 86 .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 87 }, 88 { 89 "direct packet read test#4 for CGROUP_SKB", 90 .insns = { 91 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 92 offsetof(struct __sk_buff, family)), 93 BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, 94 offsetof(struct __sk_buff, remote_ip4)), 95 BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1, 96 offsetof(struct __sk_buff, local_ip4)), 97 BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1, 98 offsetof(struct __sk_buff, remote_ip6[0])), 99 BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1, 100 offsetof(struct __sk_buff, remote_ip6[1])), 101 BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1, 102 offsetof(struct __sk_buff, remote_ip6[2])), 103 BPF_LDX_MEM(BPF_W, BPF_REG_5, BPF_REG_1, 104 offsetof(struct __sk_buff, remote_ip6[3])), 105 BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1, 106 offsetof(struct __sk_buff, local_ip6[0])), 107 BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1, 108 offsetof(struct __sk_buff, local_ip6[1])), 109 BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1, 110 offsetof(struct __sk_buff, local_ip6[2])), 111 BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1, 112 offsetof(struct __sk_buff, local_ip6[3])), 113 BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1, 114 offsetof(struct __sk_buff, remote_port)), 115 BPF_LDX_MEM(BPF_W, BPF_REG_8, BPF_REG_1, 116 offsetof(struct __sk_buff, local_port)), 117 BPF_MOV64_IMM(BPF_REG_0, 0), 118 BPF_EXIT_INSN(), 119 }, 120 .result = ACCEPT, 121 .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 122 }, 123 { 124 "invalid access of tc_classid for CGROUP_SKB", 125 .insns = { 126 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 127 offsetof(struct __sk_buff, tc_classid)), 128 BPF_MOV64_IMM(BPF_REG_0, 0), 129 BPF_EXIT_INSN(), 130 }, 131 .result = REJECT, 132 .errstr = "invalid bpf_context access", 133 .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 134 }, 135 { 136 "invalid access of data_meta for CGROUP_SKB", 137 .insns = { 138 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 139 offsetof(struct __sk_buff, data_meta)), 140 BPF_MOV64_IMM(BPF_REG_0, 0), 141 BPF_EXIT_INSN(), 142 }, 143 .result = REJECT, 144 .errstr = "invalid bpf_context access", 145 .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 146 }, 147 { 148 "invalid access of flow_keys for CGROUP_SKB", 149 .insns = { 150 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 151 offsetof(struct __sk_buff, flow_keys)), 152 BPF_MOV64_IMM(BPF_REG_0, 0), 153 BPF_EXIT_INSN(), 154 }, 155 .result = REJECT, 156 .errstr = "invalid bpf_context access", 157 .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 158 }, 159 { 160 "invalid write access to napi_id for CGROUP_SKB", 161 .insns = { 162 BPF_LDX_MEM(BPF_W, BPF_REG_9, BPF_REG_1, 163 offsetof(struct __sk_buff, napi_id)), 164 BPF_STX_MEM(BPF_W, BPF_REG_1, BPF_REG_9, 165 offsetof(struct __sk_buff, napi_id)), 166 BPF_MOV64_IMM(BPF_REG_0, 0), 167 BPF_EXIT_INSN(), 168 }, 169 .result = REJECT, 170 .errstr = "invalid bpf_context access", 171 .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 172 }, 173 { 174 "write tstamp from CGROUP_SKB", 175 .insns = { 176 BPF_MOV64_IMM(BPF_REG_0, 0), 177 BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, 178 offsetof(struct __sk_buff, tstamp)), 179 BPF_MOV64_IMM(BPF_REG_0, 0), 180 BPF_EXIT_INSN(), 181 }, 182 .result = ACCEPT, 183 .result_unpriv = REJECT, 184 .errstr_unpriv = "invalid bpf_context access off=152 size=8", 185 .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 186 }, 187 { 188 "read tstamp from CGROUP_SKB", 189 .insns = { 190 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 191 offsetof(struct __sk_buff, tstamp)), 192 BPF_MOV64_IMM(BPF_REG_0, 0), 193 BPF_EXIT_INSN(), 194 }, 195 .result = ACCEPT, 196 .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 197 }, 198