0001 {
0002 "test1 ld_imm64",
0003 .insns = {
0004 BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 1),
0005 BPF_LD_IMM64(BPF_REG_0, 0),
0006 BPF_LD_IMM64(BPF_REG_0, 0),
0007 BPF_LD_IMM64(BPF_REG_0, 1),
0008 BPF_LD_IMM64(BPF_REG_0, 1),
0009 BPF_MOV64_IMM(BPF_REG_0, 2),
0010 BPF_EXIT_INSN(),
0011 },
0012 .errstr = "invalid BPF_LD_IMM insn",
0013 .errstr_unpriv = "R1 pointer comparison",
0014 .result = REJECT,
0015 },
0016 {
0017 "test2 ld_imm64",
0018 .insns = {
0019 BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 1),
0020 BPF_LD_IMM64(BPF_REG_0, 0),
0021 BPF_LD_IMM64(BPF_REG_0, 0),
0022 BPF_LD_IMM64(BPF_REG_0, 1),
0023 BPF_LD_IMM64(BPF_REG_0, 1),
0024 BPF_EXIT_INSN(),
0025 },
0026 .errstr = "invalid BPF_LD_IMM insn",
0027 .errstr_unpriv = "R1 pointer comparison",
0028 .result = REJECT,
0029 },
0030 {
0031 "test3 ld_imm64",
0032 .insns = {
0033 BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 1),
0034 BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 0),
0035 BPF_LD_IMM64(BPF_REG_0, 0),
0036 BPF_LD_IMM64(BPF_REG_0, 0),
0037 BPF_LD_IMM64(BPF_REG_0, 1),
0038 BPF_LD_IMM64(BPF_REG_0, 1),
0039 BPF_EXIT_INSN(),
0040 },
0041 .errstr = "invalid bpf_ld_imm64 insn",
0042 .result = REJECT,
0043 },
0044 {
0045 "test4 ld_imm64",
0046 .insns = {
0047 BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 0),
0048 BPF_EXIT_INSN(),
0049 },
0050 .errstr = "invalid bpf_ld_imm64 insn",
0051 .result = REJECT,
0052 },
0053 {
0054 "test6 ld_imm64",
0055 .insns = {
0056 BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 0),
0057 BPF_RAW_INSN(0, 0, 0, 0, 0),
0058 BPF_EXIT_INSN(),
0059 },
0060 .result = ACCEPT,
0061 },
0062 {
0063 "test7 ld_imm64",
0064 .insns = {
0065 BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 1),
0066 BPF_RAW_INSN(0, 0, 0, 0, 1),
0067 BPF_EXIT_INSN(),
0068 },
0069 .result = ACCEPT,
0070 .retval = 1,
0071 },
0072 {
0073 "test8 ld_imm64",
0074 .insns = {
0075 BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 1, 1),
0076 BPF_RAW_INSN(0, 0, 0, 0, 1),
0077 BPF_EXIT_INSN(),
0078 },
0079 .errstr = "uses reserved fields",
0080 .result = REJECT,
0081 },
0082 {
0083 "test9 ld_imm64",
0084 .insns = {
0085 BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 1),
0086 BPF_RAW_INSN(0, 0, 0, 1, 1),
0087 BPF_EXIT_INSN(),
0088 },
0089 .errstr = "invalid bpf_ld_imm64 insn",
0090 .result = REJECT,
0091 },
0092 {
0093 "test10 ld_imm64",
0094 .insns = {
0095 BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 1),
0096 BPF_RAW_INSN(0, BPF_REG_1, 0, 0, 1),
0097 BPF_EXIT_INSN(),
0098 },
0099 .errstr = "invalid bpf_ld_imm64 insn",
0100 .result = REJECT,
0101 },
0102 {
0103 "test11 ld_imm64",
0104 .insns = {
0105 BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 1),
0106 BPF_RAW_INSN(0, 0, BPF_REG_1, 0, 1),
0107 BPF_EXIT_INSN(),
0108 },
0109 .errstr = "invalid bpf_ld_imm64 insn",
0110 .result = REJECT,
0111 },
0112 {
0113 "test12 ld_imm64",
0114 .insns = {
0115 BPF_MOV64_IMM(BPF_REG_1, 0),
0116 BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, BPF_REG_1, 0, 1),
0117 BPF_RAW_INSN(0, 0, 0, 0, 0),
0118 BPF_EXIT_INSN(),
0119 },
0120 .errstr = "not pointing to valid bpf_map",
0121 .result = REJECT,
0122 },
0123 {
0124 "test13 ld_imm64",
0125 .insns = {
0126 BPF_MOV64_IMM(BPF_REG_1, 0),
0127 BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, BPF_REG_1, 0, 1),
0128 BPF_RAW_INSN(0, 0, BPF_REG_1, 0, 1),
0129 BPF_EXIT_INSN(),
0130 },
0131 .errstr = "invalid bpf_ld_imm64 insn",
0132 .result = REJECT,
0133 },
0134 {
0135 "test14 ld_imm64: reject 2nd imm != 0",
0136 .insns = {
0137 BPF_MOV64_IMM(BPF_REG_0, 0),
0138 BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_1,
0139 BPF_PSEUDO_MAP_FD, 0, 0),
0140 BPF_RAW_INSN(0, 0, 0, 0, 0xfefefe),
0141 BPF_EXIT_INSN(),
0142 },
0143 .fixup_map_hash_48b = { 1 },
0144 .errstr = "unrecognized bpf_ld_imm64 insn",
0145 .result = REJECT,
0146 },