| { |
| "direct map access, write test 1", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 0), |
| BPF_ST_MEM(BPF_DW, BPF_REG_1, 0, 4242), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = ACCEPT, |
| .retval = 1, |
| }, |
| { |
| "direct map access, write test 2", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 8), |
| BPF_ST_MEM(BPF_DW, BPF_REG_1, 0, 4242), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = ACCEPT, |
| .retval = 1, |
| }, |
| { |
| "direct map access, write test 3", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 8), |
| BPF_ST_MEM(BPF_DW, BPF_REG_1, 8, 4242), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = ACCEPT, |
| .retval = 1, |
| }, |
| { |
| "direct map access, write test 4", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 40), |
| BPF_ST_MEM(BPF_DW, BPF_REG_1, 0, 4242), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = ACCEPT, |
| .retval = 1, |
| }, |
| { |
| "direct map access, write test 5", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 32), |
| BPF_ST_MEM(BPF_DW, BPF_REG_1, 8, 4242), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = ACCEPT, |
| .retval = 1, |
| }, |
| { |
| "direct map access, write test 6", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 40), |
| BPF_ST_MEM(BPF_DW, BPF_REG_1, 4, 4242), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "R1 min value is outside of the allowed memory range", |
| .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, |
| }, |
| { |
| "direct map access, write test 7", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, -1), |
| BPF_ST_MEM(BPF_DW, BPF_REG_1, 4, 4242), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "direct value offset of 4294967295 is not allowed", |
| }, |
| { |
| "direct map access, write test 8", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 1), |
| BPF_ST_MEM(BPF_DW, BPF_REG_1, -1, 4242), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = ACCEPT, |
| .retval = 1, |
| }, |
| { |
| "direct map access, write test 9", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 48), |
| BPF_ST_MEM(BPF_DW, BPF_REG_1, 0, 4242), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "invalid access to map value pointer", |
| }, |
| { |
| "direct map access, write test 10", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 47), |
| BPF_ST_MEM(BPF_B, BPF_REG_1, 0, 4), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = ACCEPT, |
| .retval = 1, |
| }, |
| { |
| "direct map access, write test 11", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 48), |
| BPF_ST_MEM(BPF_B, BPF_REG_1, 0, 4), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "invalid access to map value pointer", |
| }, |
| { |
| "direct map access, write test 12", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, (1<<29)), |
| BPF_ST_MEM(BPF_B, BPF_REG_1, 0, 4), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "direct value offset of 536870912 is not allowed", |
| }, |
| { |
| "direct map access, write test 13", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, (1<<29)-1), |
| BPF_ST_MEM(BPF_B, BPF_REG_1, 0, 4), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "invalid access to map value pointer, value_size=48 off=536870911", |
| }, |
| { |
| "direct map access, write test 14", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 47), |
| BPF_LD_MAP_VALUE(BPF_REG_2, 0, 46), |
| BPF_ST_MEM(BPF_H, BPF_REG_2, 0, 0xffff), |
| BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, 0), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1, 3 }, |
| .result = ACCEPT, |
| .retval = 0xff, |
| }, |
| { |
| "direct map access, write test 15", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 46), |
| BPF_LD_MAP_VALUE(BPF_REG_2, 0, 46), |
| BPF_ST_MEM(BPF_H, BPF_REG_2, 0, 0xffff), |
| BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 0), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1, 3 }, |
| .result = ACCEPT, |
| .retval = 0xffff, |
| }, |
| { |
| "direct map access, write test 16", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 46), |
| BPF_LD_MAP_VALUE(BPF_REG_2, 0, 47), |
| BPF_ST_MEM(BPF_H, BPF_REG_2, 0, 0xffff), |
| BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 0), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1, 3 }, |
| .result = REJECT, |
| .errstr = "invalid access to map value, value_size=48 off=47 size=2", |
| .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, |
| }, |
| { |
| "direct map access, write test 17", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 46), |
| BPF_LD_MAP_VALUE(BPF_REG_2, 0, 46), |
| BPF_ST_MEM(BPF_H, BPF_REG_2, 1, 0xffff), |
| BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, 0), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1, 3 }, |
| .result = REJECT, |
| .errstr = "invalid access to map value, value_size=48 off=47 size=2", |
| .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, |
| }, |
| { |
| "direct map access, write test 18", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 0), |
| BPF_ST_MEM(BPF_H, BPF_REG_1, 0, 42), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_small = { 1 }, |
| .result = REJECT, |
| .errstr = "R1 min value is outside of the allowed memory range", |
| }, |
| { |
| "direct map access, write test 19", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 0), |
| BPF_ST_MEM(BPF_B, BPF_REG_1, 0, 42), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_small = { 1 }, |
| .result = ACCEPT, |
| .retval = 1, |
| }, |
| { |
| "direct map access, write test 20", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_MAP_VALUE(BPF_REG_1, 0, 1), |
| BPF_ST_MEM(BPF_B, BPF_REG_1, 0, 42), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_small = { 1 }, |
| .result = REJECT, |
| .errstr = "invalid access to map value pointer", |
| }, |
| { |
| "direct map access, invalid insn test 1", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_VALUE, 0, 1, 0, 47), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "invalid bpf_ld_imm64 insn", |
| }, |
| { |
| "direct map access, invalid insn test 2", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_VALUE, 1, 0, 0, 47), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "BPF_LD_IMM64 uses reserved fields", |
| }, |
| { |
| "direct map access, invalid insn test 3", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_VALUE, ~0, 0, 0, 47), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "BPF_LD_IMM64 uses reserved fields", |
| }, |
| { |
| "direct map access, invalid insn test 4", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_VALUE, 0, ~0, 0, 47), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "invalid bpf_ld_imm64 insn", |
| }, |
| { |
| "direct map access, invalid insn test 5", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_VALUE, ~0, ~0, 0, 47), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "invalid bpf_ld_imm64 insn", |
| }, |
| { |
| "direct map access, invalid insn test 6", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_FD, ~0, 0, 0, 0), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "BPF_LD_IMM64 uses reserved fields", |
| }, |
| { |
| "direct map access, invalid insn test 7", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_FD, 0, ~0, 0, 0), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "invalid bpf_ld_imm64 insn", |
| }, |
| { |
| "direct map access, invalid insn test 8", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_FD, ~0, ~0, 0, 0), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "invalid bpf_ld_imm64 insn", |
| }, |
| { |
| "direct map access, invalid insn test 9", |
| .insns = { |
| BPF_MOV64_IMM(BPF_REG_0, 1), |
| BPF_LD_IMM64_RAW_FULL(BPF_REG_1, BPF_PSEUDO_MAP_FD, 0, 0, 0, 47), |
| BPF_EXIT_INSN(), |
| }, |
| .fixup_map_array_48b = { 1 }, |
| .result = REJECT, |
| .errstr = "unrecognized bpf_ld_imm64 insn", |
| }, |