root/tools/testing/selftests/bpf/verifier/helper_packet_access.c

/* [<][>][^][v][top][bottom][index][help] */
   1 {
   2         "helper access to packet: test1, valid packet_ptr range",
   3         .insns = {
   4         BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
   5         BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
   6                     offsetof(struct xdp_md, data_end)),
   7         BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
   8         BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
   9         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 5),
  10         BPF_LD_MAP_FD(BPF_REG_1, 0),
  11         BPF_MOV64_REG(BPF_REG_3, BPF_REG_2),
  12         BPF_MOV64_IMM(BPF_REG_4, 0),
  13         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_update_elem),
  14         BPF_MOV64_IMM(BPF_REG_0, 0),
  15         BPF_EXIT_INSN(),
  16         },
  17         .fixup_map_hash_8b = { 5 },
  18         .result_unpriv = ACCEPT,
  19         .result = ACCEPT,
  20         .prog_type = BPF_PROG_TYPE_XDP,
  21 },
  22 {
  23         "helper access to packet: test2, unchecked packet_ptr",
  24         .insns = {
  25         BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
  26         BPF_LD_MAP_FD(BPF_REG_1, 0),
  27         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
  28         BPF_MOV64_IMM(BPF_REG_0, 0),
  29         BPF_EXIT_INSN(),
  30         },
  31         .fixup_map_hash_8b = { 1 },
  32         .result = REJECT,
  33         .errstr = "invalid access to packet",
  34         .prog_type = BPF_PROG_TYPE_XDP,
  35 },
  36 {
  37         "helper access to packet: test3, variable add",
  38         .insns = {
  39         BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
  40         BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
  41                         offsetof(struct xdp_md, data_end)),
  42         BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
  43         BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8),
  44         BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 10),
  45         BPF_LDX_MEM(BPF_B, BPF_REG_5, BPF_REG_2, 0),
  46         BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
  47         BPF_ALU64_REG(BPF_ADD, BPF_REG_4, BPF_REG_5),
  48         BPF_MOV64_REG(BPF_REG_5, BPF_REG_4),
  49         BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, 8),
  50         BPF_JMP_REG(BPF_JGT, BPF_REG_5, BPF_REG_3, 4),
  51         BPF_LD_MAP_FD(BPF_REG_1, 0),
  52         BPF_MOV64_REG(BPF_REG_2, BPF_REG_4),
  53         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
  54         BPF_MOV64_IMM(BPF_REG_0, 0),
  55         BPF_EXIT_INSN(),
  56         },
  57         .fixup_map_hash_8b = { 11 },
  58         .result = ACCEPT,
  59         .prog_type = BPF_PROG_TYPE_XDP,
  60 },
  61 {
  62         "helper access to packet: test4, packet_ptr with bad range",
  63         .insns = {
  64         BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
  65         BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
  66                     offsetof(struct xdp_md, data_end)),
  67         BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
  68         BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 4),
  69         BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 2),
  70         BPF_MOV64_IMM(BPF_REG_0, 0),
  71         BPF_EXIT_INSN(),
  72         BPF_LD_MAP_FD(BPF_REG_1, 0),
  73         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
  74         BPF_MOV64_IMM(BPF_REG_0, 0),
  75         BPF_EXIT_INSN(),
  76         },
  77         .fixup_map_hash_8b = { 7 },
  78         .result = REJECT,
  79         .errstr = "invalid access to packet",
  80         .prog_type = BPF_PROG_TYPE_XDP,
  81 },
  82 {
  83         "helper access to packet: test5, packet_ptr with too short range",
  84         .insns = {
  85         BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
  86         BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
  87                     offsetof(struct xdp_md, data_end)),
  88         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, 1),
  89         BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
  90         BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 7),
  91         BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 3),
  92         BPF_LD_MAP_FD(BPF_REG_1, 0),
  93         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
  94         BPF_MOV64_IMM(BPF_REG_0, 0),
  95         BPF_EXIT_INSN(),
  96         },
  97         .fixup_map_hash_8b = { 6 },
  98         .result = REJECT,
  99         .errstr = "invalid access to packet",
 100         .prog_type = BPF_PROG_TYPE_XDP,
 101 },
 102 {
 103         "helper access to packet: test6, cls valid packet_ptr range",
 104         .insns = {
 105         BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
 106                     offsetof(struct __sk_buff, data)),
 107         BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
 108                     offsetof(struct __sk_buff, data_end)),
 109         BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
 110         BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
 111         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 5),
 112         BPF_LD_MAP_FD(BPF_REG_1, 0),
 113         BPF_MOV64_REG(BPF_REG_3, BPF_REG_2),
 114         BPF_MOV64_IMM(BPF_REG_4, 0),
 115         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_update_elem),
 116         BPF_MOV64_IMM(BPF_REG_0, 0),
 117         BPF_EXIT_INSN(),
 118         },
 119         .fixup_map_hash_8b = { 5 },
 120         .result = ACCEPT,
 121         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 122 },
 123 {
 124         "helper access to packet: test7, cls unchecked packet_ptr",
 125         .insns = {
 126         BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
 127                     offsetof(struct __sk_buff, data)),
 128         BPF_LD_MAP_FD(BPF_REG_1, 0),
 129         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 130         BPF_MOV64_IMM(BPF_REG_0, 0),
 131         BPF_EXIT_INSN(),
 132         },
 133         .fixup_map_hash_8b = { 1 },
 134         .result = REJECT,
 135         .errstr = "invalid access to packet",
 136         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 137 },
 138 {
 139         "helper access to packet: test8, cls variable add",
 140         .insns = {
 141         BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
 142                         offsetof(struct __sk_buff, data)),
 143         BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
 144                         offsetof(struct __sk_buff, data_end)),
 145         BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
 146         BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8),
 147         BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 10),
 148         BPF_LDX_MEM(BPF_B, BPF_REG_5, BPF_REG_2, 0),
 149         BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
 150         BPF_ALU64_REG(BPF_ADD, BPF_REG_4, BPF_REG_5),
 151         BPF_MOV64_REG(BPF_REG_5, BPF_REG_4),
 152         BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, 8),
 153         BPF_JMP_REG(BPF_JGT, BPF_REG_5, BPF_REG_3, 4),
 154         BPF_LD_MAP_FD(BPF_REG_1, 0),
 155         BPF_MOV64_REG(BPF_REG_2, BPF_REG_4),
 156         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 157         BPF_MOV64_IMM(BPF_REG_0, 0),
 158         BPF_EXIT_INSN(),
 159         },
 160         .fixup_map_hash_8b = { 11 },
 161         .result = ACCEPT,
 162         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 163 },
 164 {
 165         "helper access to packet: test9, cls packet_ptr with bad range",
 166         .insns = {
 167         BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
 168                     offsetof(struct __sk_buff, data)),
 169         BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
 170                     offsetof(struct __sk_buff, data_end)),
 171         BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
 172         BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 4),
 173         BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 2),
 174         BPF_MOV64_IMM(BPF_REG_0, 0),
 175         BPF_EXIT_INSN(),
 176         BPF_LD_MAP_FD(BPF_REG_1, 0),
 177         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 178         BPF_MOV64_IMM(BPF_REG_0, 0),
 179         BPF_EXIT_INSN(),
 180         },
 181         .fixup_map_hash_8b = { 7 },
 182         .result = REJECT,
 183         .errstr = "invalid access to packet",
 184         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 185 },
 186 {
 187         "helper access to packet: test10, cls packet_ptr with too short range",
 188         .insns = {
 189         BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
 190                     offsetof(struct __sk_buff, data)),
 191         BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
 192                     offsetof(struct __sk_buff, data_end)),
 193         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, 1),
 194         BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
 195         BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 7),
 196         BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 3),
 197         BPF_LD_MAP_FD(BPF_REG_1, 0),
 198         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 199         BPF_MOV64_IMM(BPF_REG_0, 0),
 200         BPF_EXIT_INSN(),
 201         },
 202         .fixup_map_hash_8b = { 6 },
 203         .result = REJECT,
 204         .errstr = "invalid access to packet",
 205         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 206 },
 207 {
 208         "helper access to packet: test11, cls unsuitable helper 1",
 209         .insns = {
 210         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 211                     offsetof(struct __sk_buff, data)),
 212         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
 213                     offsetof(struct __sk_buff, data_end)),
 214         BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
 215         BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
 216         BPF_ALU64_IMM(BPF_ADD, BPF_REG_3, 7),
 217         BPF_JMP_REG(BPF_JGT, BPF_REG_3, BPF_REG_7, 4),
 218         BPF_MOV64_IMM(BPF_REG_2, 0),
 219         BPF_MOV64_IMM(BPF_REG_4, 42),
 220         BPF_MOV64_IMM(BPF_REG_5, 0),
 221         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_store_bytes),
 222         BPF_MOV64_IMM(BPF_REG_0, 0),
 223         BPF_EXIT_INSN(),
 224         },
 225         .result = REJECT,
 226         .errstr = "helper access to the packet",
 227         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 228 },
 229 {
 230         "helper access to packet: test12, cls unsuitable helper 2",
 231         .insns = {
 232         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 233                     offsetof(struct __sk_buff, data)),
 234         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
 235                     offsetof(struct __sk_buff, data_end)),
 236         BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
 237         BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 8),
 238         BPF_JMP_REG(BPF_JGT, BPF_REG_6, BPF_REG_7, 3),
 239         BPF_MOV64_IMM(BPF_REG_2, 0),
 240         BPF_MOV64_IMM(BPF_REG_4, 4),
 241         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
 242         BPF_MOV64_IMM(BPF_REG_0, 0),
 243         BPF_EXIT_INSN(),
 244         },
 245         .result = REJECT,
 246         .errstr = "helper access to the packet",
 247         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 248 },
 249 {
 250         "helper access to packet: test13, cls helper ok",
 251         .insns = {
 252         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 253                     offsetof(struct __sk_buff, data)),
 254         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
 255                     offsetof(struct __sk_buff, data_end)),
 256         BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
 257         BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
 258         BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
 259         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
 260         BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
 261         BPF_MOV64_IMM(BPF_REG_2, 4),
 262         BPF_MOV64_IMM(BPF_REG_3, 0),
 263         BPF_MOV64_IMM(BPF_REG_4, 0),
 264         BPF_MOV64_IMM(BPF_REG_5, 0),
 265         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
 266         BPF_MOV64_IMM(BPF_REG_0, 0),
 267         BPF_EXIT_INSN(),
 268         },
 269         .result = ACCEPT,
 270         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 271 },
 272 {
 273         "helper access to packet: test14, cls helper ok sub",
 274         .insns = {
 275         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 276                     offsetof(struct __sk_buff, data)),
 277         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
 278                     offsetof(struct __sk_buff, data_end)),
 279         BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
 280         BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
 281         BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
 282         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
 283         BPF_ALU64_IMM(BPF_SUB, BPF_REG_1, 4),
 284         BPF_MOV64_IMM(BPF_REG_2, 4),
 285         BPF_MOV64_IMM(BPF_REG_3, 0),
 286         BPF_MOV64_IMM(BPF_REG_4, 0),
 287         BPF_MOV64_IMM(BPF_REG_5, 0),
 288         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
 289         BPF_MOV64_IMM(BPF_REG_0, 0),
 290         BPF_EXIT_INSN(),
 291         },
 292         .result = ACCEPT,
 293         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 294 },
 295 {
 296         "helper access to packet: test15, cls helper fail sub",
 297         .insns = {
 298         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 299                     offsetof(struct __sk_buff, data)),
 300         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
 301                     offsetof(struct __sk_buff, data_end)),
 302         BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
 303         BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
 304         BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
 305         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
 306         BPF_ALU64_IMM(BPF_SUB, BPF_REG_1, 12),
 307         BPF_MOV64_IMM(BPF_REG_2, 4),
 308         BPF_MOV64_IMM(BPF_REG_3, 0),
 309         BPF_MOV64_IMM(BPF_REG_4, 0),
 310         BPF_MOV64_IMM(BPF_REG_5, 0),
 311         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
 312         BPF_MOV64_IMM(BPF_REG_0, 0),
 313         BPF_EXIT_INSN(),
 314         },
 315         .result = REJECT,
 316         .errstr = "invalid access to packet",
 317         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 318 },
 319 {
 320         "helper access to packet: test16, cls helper fail range 1",
 321         .insns = {
 322         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 323                     offsetof(struct __sk_buff, data)),
 324         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
 325                     offsetof(struct __sk_buff, data_end)),
 326         BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
 327         BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
 328         BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
 329         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
 330         BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
 331         BPF_MOV64_IMM(BPF_REG_2, 8),
 332         BPF_MOV64_IMM(BPF_REG_3, 0),
 333         BPF_MOV64_IMM(BPF_REG_4, 0),
 334         BPF_MOV64_IMM(BPF_REG_5, 0),
 335         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
 336         BPF_MOV64_IMM(BPF_REG_0, 0),
 337         BPF_EXIT_INSN(),
 338         },
 339         .result = REJECT,
 340         .errstr = "invalid access to packet",
 341         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 342 },
 343 {
 344         "helper access to packet: test17, cls helper fail range 2",
 345         .insns = {
 346         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 347                     offsetof(struct __sk_buff, data)),
 348         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
 349                     offsetof(struct __sk_buff, data_end)),
 350         BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
 351         BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
 352         BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
 353         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
 354         BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
 355         BPF_MOV64_IMM(BPF_REG_2, -9),
 356         BPF_MOV64_IMM(BPF_REG_3, 0),
 357         BPF_MOV64_IMM(BPF_REG_4, 0),
 358         BPF_MOV64_IMM(BPF_REG_5, 0),
 359         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
 360         BPF_MOV64_IMM(BPF_REG_0, 0),
 361         BPF_EXIT_INSN(),
 362         },
 363         .result = REJECT,
 364         .errstr = "R2 min value is negative",
 365         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 366 },
 367 {
 368         "helper access to packet: test18, cls helper fail range 3",
 369         .insns = {
 370         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 371                     offsetof(struct __sk_buff, data)),
 372         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
 373                     offsetof(struct __sk_buff, data_end)),
 374         BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
 375         BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
 376         BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
 377         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
 378         BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
 379         BPF_MOV64_IMM(BPF_REG_2, ~0),
 380         BPF_MOV64_IMM(BPF_REG_3, 0),
 381         BPF_MOV64_IMM(BPF_REG_4, 0),
 382         BPF_MOV64_IMM(BPF_REG_5, 0),
 383         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
 384         BPF_MOV64_IMM(BPF_REG_0, 0),
 385         BPF_EXIT_INSN(),
 386         },
 387         .result = REJECT,
 388         .errstr = "R2 min value is negative",
 389         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 390 },
 391 {
 392         "helper access to packet: test19, cls helper range zero",
 393         .insns = {
 394         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 395                     offsetof(struct __sk_buff, data)),
 396         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
 397                     offsetof(struct __sk_buff, data_end)),
 398         BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
 399         BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
 400         BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
 401         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
 402         BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
 403         BPF_MOV64_IMM(BPF_REG_2, 0),
 404         BPF_MOV64_IMM(BPF_REG_3, 0),
 405         BPF_MOV64_IMM(BPF_REG_4, 0),
 406         BPF_MOV64_IMM(BPF_REG_5, 0),
 407         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
 408         BPF_MOV64_IMM(BPF_REG_0, 0),
 409         BPF_EXIT_INSN(),
 410         },
 411         .result = ACCEPT,
 412         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 413 },
 414 {
 415         "helper access to packet: test20, pkt end as input",
 416         .insns = {
 417         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 418                     offsetof(struct __sk_buff, data)),
 419         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
 420                     offsetof(struct __sk_buff, data_end)),
 421         BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
 422         BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
 423         BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
 424         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
 425         BPF_MOV64_REG(BPF_REG_1, BPF_REG_7),
 426         BPF_MOV64_IMM(BPF_REG_2, 4),
 427         BPF_MOV64_IMM(BPF_REG_3, 0),
 428         BPF_MOV64_IMM(BPF_REG_4, 0),
 429         BPF_MOV64_IMM(BPF_REG_5, 0),
 430         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
 431         BPF_MOV64_IMM(BPF_REG_0, 0),
 432         BPF_EXIT_INSN(),
 433         },
 434         .result = REJECT,
 435         .errstr = "R1 type=pkt_end expected=fp",
 436         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 437 },
 438 {
 439         "helper access to packet: test21, wrong reg",
 440         .insns = {
 441         BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
 442                     offsetof(struct __sk_buff, data)),
 443         BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
 444                     offsetof(struct __sk_buff, data_end)),
 445         BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
 446         BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
 447         BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
 448         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
 449         BPF_MOV64_IMM(BPF_REG_2, 4),
 450         BPF_MOV64_IMM(BPF_REG_3, 0),
 451         BPF_MOV64_IMM(BPF_REG_4, 0),
 452         BPF_MOV64_IMM(BPF_REG_5, 0),
 453         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
 454         BPF_MOV64_IMM(BPF_REG_0, 0),
 455         BPF_EXIT_INSN(),
 456         },
 457         .result = REJECT,
 458         .errstr = "invalid access to packet",
 459         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 460 },

/* [<][>][^][v][top][bottom][index][help] */