0001 {
0002 "dead code: start",
0003 .insns = {
0004 BPF_JMP_IMM(BPF_JA, 0, 0, 2),
0005 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
0006 BPF_JMP_IMM(BPF_JA, 0, 0, 2),
0007 BPF_MOV64_IMM(BPF_REG_0, 7),
0008 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, -4),
0009 BPF_EXIT_INSN(),
0010 },
0011 .errstr_unpriv = "R9 !read_ok",
0012 .result_unpriv = REJECT,
0013 .result = ACCEPT,
0014 .retval = 7,
0015 },
0016 {
0017 "dead code: mid 1",
0018 .insns = {
0019 BPF_MOV64_IMM(BPF_REG_0, 7),
0020 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 0, 1),
0021 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 0),
0022 BPF_EXIT_INSN(),
0023 },
0024 .result = ACCEPT,
0025 .retval = 7,
0026 },
0027 {
0028 "dead code: mid 2",
0029 .insns = {
0030 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
0031 BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 4),
0032 BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1),
0033 BPF_JMP_IMM(BPF_JA, 0, 0, 2),
0034 BPF_MOV64_IMM(BPF_REG_0, 7),
0035 BPF_EXIT_INSN(),
0036 BPF_MOV64_IMM(BPF_REG_0, 1),
0037 BPF_EXIT_INSN(),
0038 },
0039 .result = ACCEPT,
0040 .retval = 1,
0041 },
0042 {
0043 "dead code: end 1",
0044 .insns = {
0045 BPF_MOV64_IMM(BPF_REG_0, 7),
0046 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
0047 BPF_EXIT_INSN(),
0048 BPF_EXIT_INSN(),
0049 },
0050 .result = ACCEPT,
0051 .retval = 7,
0052 },
0053 {
0054 "dead code: end 2",
0055 .insns = {
0056 BPF_MOV64_IMM(BPF_REG_0, 7),
0057 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
0058 BPF_EXIT_INSN(),
0059 BPF_MOV64_IMM(BPF_REG_0, 12),
0060 BPF_EXIT_INSN(),
0061 },
0062 .result = ACCEPT,
0063 .retval = 7,
0064 },
0065 {
0066 "dead code: end 3",
0067 .insns = {
0068 BPF_MOV64_IMM(BPF_REG_0, 7),
0069 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
0070 BPF_EXIT_INSN(),
0071 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1),
0072 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
0073 BPF_MOV64_IMM(BPF_REG_0, 12),
0074 BPF_JMP_IMM(BPF_JA, 0, 0, -5),
0075 },
0076 .result = ACCEPT,
0077 .retval = 7,
0078 },
0079 {
0080 "dead code: tail of main + func",
0081 .insns = {
0082 BPF_MOV64_IMM(BPF_REG_0, 7),
0083 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
0084 BPF_EXIT_INSN(),
0085 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
0086 BPF_EXIT_INSN(),
0087 BPF_MOV64_IMM(BPF_REG_0, 12),
0088 BPF_EXIT_INSN(),
0089 },
0090 .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
0091 .result_unpriv = REJECT,
0092 .result = ACCEPT,
0093 .retval = 7,
0094 },
0095 {
0096 "dead code: tail of main + two functions",
0097 .insns = {
0098 BPF_MOV64_IMM(BPF_REG_0, 7),
0099 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1),
0100 BPF_EXIT_INSN(),
0101 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
0102 BPF_EXIT_INSN(),
0103 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
0104 BPF_EXIT_INSN(),
0105 BPF_MOV64_IMM(BPF_REG_0, 12),
0106 BPF_EXIT_INSN(),
0107 },
0108 .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
0109 .result_unpriv = REJECT,
0110 .result = ACCEPT,
0111 .retval = 7,
0112 },
0113 {
0114 "dead code: function in the middle and mid of another func",
0115 .insns = {
0116 BPF_MOV64_IMM(BPF_REG_1, 7),
0117 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 3),
0118 BPF_EXIT_INSN(),
0119 BPF_MOV64_IMM(BPF_REG_0, 12),
0120 BPF_EXIT_INSN(),
0121 BPF_MOV64_IMM(BPF_REG_0, 7),
0122 BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 7, 1),
0123 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, -5),
0124 BPF_EXIT_INSN(),
0125 },
0126 .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
0127 .result_unpriv = REJECT,
0128 .result = ACCEPT,
0129 .retval = 7,
0130 },
0131 {
0132 "dead code: middle of main before call",
0133 .insns = {
0134 BPF_MOV64_IMM(BPF_REG_1, 2),
0135 BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 2, 1),
0136 BPF_MOV64_IMM(BPF_REG_1, 5),
0137 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
0138 BPF_EXIT_INSN(),
0139 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0140 BPF_EXIT_INSN(),
0141 },
0142 .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
0143 .result_unpriv = REJECT,
0144 .result = ACCEPT,
0145 .retval = 2,
0146 },
0147 {
0148 "dead code: start of a function",
0149 .insns = {
0150 BPF_MOV64_IMM(BPF_REG_1, 2),
0151 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
0152 BPF_EXIT_INSN(),
0153 BPF_JMP_IMM(BPF_JA, 0, 0, 0),
0154 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
0155 BPF_EXIT_INSN(),
0156 },
0157 .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for",
0158 .result_unpriv = REJECT,
0159 .result = ACCEPT,
0160 .retval = 2,
0161 },
0162 {
0163 "dead code: zero extension",
0164 .insns = {
0165 BPF_MOV64_IMM(BPF_REG_0, 0),
0166 BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4),
0167 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 0, 1),
0168 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_10, -4),
0169 BPF_EXIT_INSN(),
0170 },
0171 .result = ACCEPT,
0172 .retval = 0,
0173 },