Back to home page

OSCL-LXR

 
 

    


0001 {
0002     "helper access to packet: test1, valid packet_ptr range",
0003     .insns = {
0004     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
0005     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0006             offsetof(struct xdp_md, data_end)),
0007     BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
0008     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
0009     BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 5),
0010     BPF_LD_MAP_FD(BPF_REG_1, 0),
0011     BPF_MOV64_REG(BPF_REG_3, BPF_REG_2),
0012     BPF_MOV64_IMM(BPF_REG_4, 0),
0013     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_update_elem),
0014     BPF_MOV64_IMM(BPF_REG_0, 0),
0015     BPF_EXIT_INSN(),
0016     },
0017     .fixup_map_hash_8b = { 5 },
0018     .result_unpriv = ACCEPT,
0019     .result = ACCEPT,
0020     .prog_type = BPF_PROG_TYPE_XDP,
0021 },
0022 {
0023     "helper access to packet: test2, unchecked packet_ptr",
0024     .insns = {
0025     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
0026     BPF_LD_MAP_FD(BPF_REG_1, 0),
0027     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0028     BPF_MOV64_IMM(BPF_REG_0, 0),
0029     BPF_EXIT_INSN(),
0030     },
0031     .fixup_map_hash_8b = { 1 },
0032     .result = REJECT,
0033     .errstr = "invalid access to packet",
0034     .prog_type = BPF_PROG_TYPE_XDP,
0035 },
0036 {
0037     "helper access to packet: test3, variable add",
0038     .insns = {
0039     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
0040     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0041             offsetof(struct xdp_md, data_end)),
0042     BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
0043     BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8),
0044     BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 10),
0045     BPF_LDX_MEM(BPF_B, BPF_REG_5, BPF_REG_2, 0),
0046     BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
0047     BPF_ALU64_REG(BPF_ADD, BPF_REG_4, BPF_REG_5),
0048     BPF_MOV64_REG(BPF_REG_5, BPF_REG_4),
0049     BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, 8),
0050     BPF_JMP_REG(BPF_JGT, BPF_REG_5, BPF_REG_3, 4),
0051     BPF_LD_MAP_FD(BPF_REG_1, 0),
0052     BPF_MOV64_REG(BPF_REG_2, BPF_REG_4),
0053     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0054     BPF_MOV64_IMM(BPF_REG_0, 0),
0055     BPF_EXIT_INSN(),
0056     },
0057     .fixup_map_hash_8b = { 11 },
0058     .result = ACCEPT,
0059     .prog_type = BPF_PROG_TYPE_XDP,
0060 },
0061 {
0062     "helper access to packet: test4, packet_ptr with bad range",
0063     .insns = {
0064     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
0065     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0066             offsetof(struct xdp_md, data_end)),
0067     BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
0068     BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 4),
0069     BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 2),
0070     BPF_MOV64_IMM(BPF_REG_0, 0),
0071     BPF_EXIT_INSN(),
0072     BPF_LD_MAP_FD(BPF_REG_1, 0),
0073     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0074     BPF_MOV64_IMM(BPF_REG_0, 0),
0075     BPF_EXIT_INSN(),
0076     },
0077     .fixup_map_hash_8b = { 7 },
0078     .result = REJECT,
0079     .errstr = "invalid access to packet",
0080     .prog_type = BPF_PROG_TYPE_XDP,
0081 },
0082 {
0083     "helper access to packet: test5, packet_ptr with too short range",
0084     .insns = {
0085     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
0086     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0087             offsetof(struct xdp_md, data_end)),
0088     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, 1),
0089     BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
0090     BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 7),
0091     BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 3),
0092     BPF_LD_MAP_FD(BPF_REG_1, 0),
0093     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0094     BPF_MOV64_IMM(BPF_REG_0, 0),
0095     BPF_EXIT_INSN(),
0096     },
0097     .fixup_map_hash_8b = { 6 },
0098     .result = REJECT,
0099     .errstr = "invalid access to packet",
0100     .prog_type = BPF_PROG_TYPE_XDP,
0101 },
0102 {
0103     "helper access to packet: test6, cls valid packet_ptr range",
0104     .insns = {
0105     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
0106             offsetof(struct __sk_buff, data)),
0107     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0108             offsetof(struct __sk_buff, data_end)),
0109     BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
0110     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
0111     BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 5),
0112     BPF_LD_MAP_FD(BPF_REG_1, 0),
0113     BPF_MOV64_REG(BPF_REG_3, BPF_REG_2),
0114     BPF_MOV64_IMM(BPF_REG_4, 0),
0115     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_update_elem),
0116     BPF_MOV64_IMM(BPF_REG_0, 0),
0117     BPF_EXIT_INSN(),
0118     },
0119     .fixup_map_hash_8b = { 5 },
0120     .result = ACCEPT,
0121     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0122 },
0123 {
0124     "helper access to packet: test7, cls unchecked packet_ptr",
0125     .insns = {
0126     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
0127             offsetof(struct __sk_buff, data)),
0128     BPF_LD_MAP_FD(BPF_REG_1, 0),
0129     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0130     BPF_MOV64_IMM(BPF_REG_0, 0),
0131     BPF_EXIT_INSN(),
0132     },
0133     .fixup_map_hash_8b = { 1 },
0134     .result = REJECT,
0135     .errstr = "invalid access to packet",
0136     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0137 },
0138 {
0139     "helper access to packet: test8, cls variable add",
0140     .insns = {
0141     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
0142             offsetof(struct __sk_buff, data)),
0143     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0144             offsetof(struct __sk_buff, data_end)),
0145     BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
0146     BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8),
0147     BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 10),
0148     BPF_LDX_MEM(BPF_B, BPF_REG_5, BPF_REG_2, 0),
0149     BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
0150     BPF_ALU64_REG(BPF_ADD, BPF_REG_4, BPF_REG_5),
0151     BPF_MOV64_REG(BPF_REG_5, BPF_REG_4),
0152     BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, 8),
0153     BPF_JMP_REG(BPF_JGT, BPF_REG_5, BPF_REG_3, 4),
0154     BPF_LD_MAP_FD(BPF_REG_1, 0),
0155     BPF_MOV64_REG(BPF_REG_2, BPF_REG_4),
0156     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0157     BPF_MOV64_IMM(BPF_REG_0, 0),
0158     BPF_EXIT_INSN(),
0159     },
0160     .fixup_map_hash_8b = { 11 },
0161     .result = ACCEPT,
0162     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0163 },
0164 {
0165     "helper access to packet: test9, cls packet_ptr with bad range",
0166     .insns = {
0167     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
0168             offsetof(struct __sk_buff, data)),
0169     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0170             offsetof(struct __sk_buff, data_end)),
0171     BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
0172     BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 4),
0173     BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 2),
0174     BPF_MOV64_IMM(BPF_REG_0, 0),
0175     BPF_EXIT_INSN(),
0176     BPF_LD_MAP_FD(BPF_REG_1, 0),
0177     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0178     BPF_MOV64_IMM(BPF_REG_0, 0),
0179     BPF_EXIT_INSN(),
0180     },
0181     .fixup_map_hash_8b = { 7 },
0182     .result = REJECT,
0183     .errstr = "invalid access to packet",
0184     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0185 },
0186 {
0187     "helper access to packet: test10, cls packet_ptr with too short range",
0188     .insns = {
0189     BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
0190             offsetof(struct __sk_buff, data)),
0191     BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
0192             offsetof(struct __sk_buff, data_end)),
0193     BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, 1),
0194     BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
0195     BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 7),
0196     BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 3),
0197     BPF_LD_MAP_FD(BPF_REG_1, 0),
0198     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
0199     BPF_MOV64_IMM(BPF_REG_0, 0),
0200     BPF_EXIT_INSN(),
0201     },
0202     .fixup_map_hash_8b = { 6 },
0203     .result = REJECT,
0204     .errstr = "invalid access to packet",
0205     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0206 },
0207 {
0208     "helper access to packet: test11, cls unsuitable helper 1",
0209     .insns = {
0210     BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
0211             offsetof(struct __sk_buff, data)),
0212     BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
0213             offsetof(struct __sk_buff, data_end)),
0214     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
0215     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0216     BPF_ALU64_IMM(BPF_ADD, BPF_REG_3, 7),
0217     BPF_JMP_REG(BPF_JGT, BPF_REG_3, BPF_REG_7, 4),
0218     BPF_MOV64_IMM(BPF_REG_2, 0),
0219     BPF_MOV64_IMM(BPF_REG_4, 42),
0220     BPF_MOV64_IMM(BPF_REG_5, 0),
0221     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_store_bytes),
0222     BPF_MOV64_IMM(BPF_REG_0, 0),
0223     BPF_EXIT_INSN(),
0224     },
0225     .result = REJECT,
0226     .errstr = "helper access to the packet",
0227     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0228 },
0229 {
0230     "helper access to packet: test12, cls unsuitable helper 2",
0231     .insns = {
0232     BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
0233             offsetof(struct __sk_buff, data)),
0234     BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
0235             offsetof(struct __sk_buff, data_end)),
0236     BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
0237     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 8),
0238     BPF_JMP_REG(BPF_JGT, BPF_REG_6, BPF_REG_7, 3),
0239     BPF_MOV64_IMM(BPF_REG_2, 0),
0240     BPF_MOV64_IMM(BPF_REG_4, 4),
0241     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
0242     BPF_MOV64_IMM(BPF_REG_0, 0),
0243     BPF_EXIT_INSN(),
0244     },
0245     .result = REJECT,
0246     .errstr = "helper access to the packet",
0247     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0248 },
0249 {
0250     "helper access to packet: test13, cls helper ok",
0251     .insns = {
0252     BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
0253             offsetof(struct __sk_buff, data)),
0254     BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
0255             offsetof(struct __sk_buff, data_end)),
0256     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
0257     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0258     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
0259     BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
0260     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0261     BPF_MOV64_IMM(BPF_REG_2, 4),
0262     BPF_MOV64_IMM(BPF_REG_3, 0),
0263     BPF_MOV64_IMM(BPF_REG_4, 0),
0264     BPF_MOV64_IMM(BPF_REG_5, 0),
0265     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
0266     BPF_MOV64_IMM(BPF_REG_0, 0),
0267     BPF_EXIT_INSN(),
0268     },
0269     .result = ACCEPT,
0270     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0271 },
0272 {
0273     "helper access to packet: test14, cls helper ok sub",
0274     .insns = {
0275     BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
0276             offsetof(struct __sk_buff, data)),
0277     BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
0278             offsetof(struct __sk_buff, data_end)),
0279     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
0280     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0281     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
0282     BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
0283     BPF_ALU64_IMM(BPF_SUB, BPF_REG_1, 4),
0284     BPF_MOV64_IMM(BPF_REG_2, 4),
0285     BPF_MOV64_IMM(BPF_REG_3, 0),
0286     BPF_MOV64_IMM(BPF_REG_4, 0),
0287     BPF_MOV64_IMM(BPF_REG_5, 0),
0288     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
0289     BPF_MOV64_IMM(BPF_REG_0, 0),
0290     BPF_EXIT_INSN(),
0291     },
0292     .result = ACCEPT,
0293     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0294 },
0295 {
0296     "helper access to packet: test15, cls helper fail sub",
0297     .insns = {
0298     BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
0299             offsetof(struct __sk_buff, data)),
0300     BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
0301             offsetof(struct __sk_buff, data_end)),
0302     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
0303     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0304     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
0305     BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
0306     BPF_ALU64_IMM(BPF_SUB, BPF_REG_1, 12),
0307     BPF_MOV64_IMM(BPF_REG_2, 4),
0308     BPF_MOV64_IMM(BPF_REG_3, 0),
0309     BPF_MOV64_IMM(BPF_REG_4, 0),
0310     BPF_MOV64_IMM(BPF_REG_5, 0),
0311     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
0312     BPF_MOV64_IMM(BPF_REG_0, 0),
0313     BPF_EXIT_INSN(),
0314     },
0315     .result = REJECT,
0316     .errstr = "invalid access to packet",
0317     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0318 },
0319 {
0320     "helper access to packet: test16, cls helper fail range 1",
0321     .insns = {
0322     BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
0323             offsetof(struct __sk_buff, data)),
0324     BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
0325             offsetof(struct __sk_buff, data_end)),
0326     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
0327     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0328     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
0329     BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
0330     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0331     BPF_MOV64_IMM(BPF_REG_2, 8),
0332     BPF_MOV64_IMM(BPF_REG_3, 0),
0333     BPF_MOV64_IMM(BPF_REG_4, 0),
0334     BPF_MOV64_IMM(BPF_REG_5, 0),
0335     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
0336     BPF_MOV64_IMM(BPF_REG_0, 0),
0337     BPF_EXIT_INSN(),
0338     },
0339     .result = REJECT,
0340     .errstr = "invalid access to packet",
0341     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0342 },
0343 {
0344     "helper access to packet: test17, cls helper fail range 2",
0345     .insns = {
0346     BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
0347             offsetof(struct __sk_buff, data)),
0348     BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
0349             offsetof(struct __sk_buff, data_end)),
0350     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
0351     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0352     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
0353     BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
0354     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0355     BPF_MOV64_IMM(BPF_REG_2, -9),
0356     BPF_MOV64_IMM(BPF_REG_3, 0),
0357     BPF_MOV64_IMM(BPF_REG_4, 0),
0358     BPF_MOV64_IMM(BPF_REG_5, 0),
0359     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
0360     BPF_MOV64_IMM(BPF_REG_0, 0),
0361     BPF_EXIT_INSN(),
0362     },
0363     .result = REJECT,
0364     .errstr = "R2 min value is negative",
0365     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0366 },
0367 {
0368     "helper access to packet: test18, cls helper fail range 3",
0369     .insns = {
0370     BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
0371             offsetof(struct __sk_buff, data)),
0372     BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
0373             offsetof(struct __sk_buff, data_end)),
0374     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
0375     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0376     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
0377     BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
0378     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0379     BPF_MOV64_IMM(BPF_REG_2, ~0),
0380     BPF_MOV64_IMM(BPF_REG_3, 0),
0381     BPF_MOV64_IMM(BPF_REG_4, 0),
0382     BPF_MOV64_IMM(BPF_REG_5, 0),
0383     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
0384     BPF_MOV64_IMM(BPF_REG_0, 0),
0385     BPF_EXIT_INSN(),
0386     },
0387     .result = REJECT,
0388     .errstr = "R2 min value is negative",
0389     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0390 },
0391 {
0392     "helper access to packet: test19, cls helper range zero",
0393     .insns = {
0394     BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
0395             offsetof(struct __sk_buff, data)),
0396     BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
0397             offsetof(struct __sk_buff, data_end)),
0398     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
0399     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0400     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
0401     BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
0402     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0403     BPF_MOV64_IMM(BPF_REG_2, 0),
0404     BPF_MOV64_IMM(BPF_REG_3, 0),
0405     BPF_MOV64_IMM(BPF_REG_4, 0),
0406     BPF_MOV64_IMM(BPF_REG_5, 0),
0407     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
0408     BPF_MOV64_IMM(BPF_REG_0, 0),
0409     BPF_EXIT_INSN(),
0410     },
0411     .result = ACCEPT,
0412     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0413 },
0414 {
0415     "helper access to packet: test20, pkt end as input",
0416     .insns = {
0417     BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
0418             offsetof(struct __sk_buff, data)),
0419     BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
0420             offsetof(struct __sk_buff, data_end)),
0421     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
0422     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0423     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
0424     BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
0425     BPF_MOV64_REG(BPF_REG_1, BPF_REG_7),
0426     BPF_MOV64_IMM(BPF_REG_2, 4),
0427     BPF_MOV64_IMM(BPF_REG_3, 0),
0428     BPF_MOV64_IMM(BPF_REG_4, 0),
0429     BPF_MOV64_IMM(BPF_REG_5, 0),
0430     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
0431     BPF_MOV64_IMM(BPF_REG_0, 0),
0432     BPF_EXIT_INSN(),
0433     },
0434     .result = REJECT,
0435     .errstr = "R1 type=pkt_end expected=fp",
0436     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0437 },
0438 {
0439     "helper access to packet: test21, wrong reg",
0440     .insns = {
0441     BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
0442             offsetof(struct __sk_buff, data)),
0443     BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
0444             offsetof(struct __sk_buff, data_end)),
0445     BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
0446     BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
0447     BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
0448     BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
0449     BPF_MOV64_IMM(BPF_REG_2, 4),
0450     BPF_MOV64_IMM(BPF_REG_3, 0),
0451     BPF_MOV64_IMM(BPF_REG_4, 0),
0452     BPF_MOV64_IMM(BPF_REG_5, 0),
0453     BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
0454     BPF_MOV64_IMM(BPF_REG_0, 0),
0455     BPF_EXIT_INSN(),
0456     },
0457     .result = REJECT,
0458     .errstr = "invalid access to packet",
0459     .prog_type = BPF_PROG_TYPE_SCHED_CLS,
0460 },