1 { 2 "dead code: start", 3 .insns = { 4 BPF_JMP_IMM(BPF_JA, 0, 0, 2), 5 /* unpriv: nospec (inserted to prevent "R9 !read_ok") */ 6 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0), 7 BPF_JMP_IMM(BPF_JA, 0, 0, 2), 8 BPF_MOV64_IMM(BPF_REG_0, 7), 9 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, -4), 10 BPF_EXIT_INSN(), 11 }, 12 .result = ACCEPT, 13 .retval = 7, 14 }, 15 { 16 "dead code: mid 1", 17 .insns = { 18 BPF_MOV64_IMM(BPF_REG_0, 7), 19 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 0, 1), 20 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 0), 21 BPF_EXIT_INSN(), 22 }, 23 .result = ACCEPT, 24 .retval = 7, 25 }, 26 { 27 "dead code: mid 2", 28 .insns = { 29 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 30 BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 4), 31 BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1), 32 BPF_JMP_IMM(BPF_JA, 0, 0, 2), 33 BPF_MOV64_IMM(BPF_REG_0, 7), 34 BPF_EXIT_INSN(), 35 BPF_MOV64_IMM(BPF_REG_0, 1), 36 BPF_EXIT_INSN(), 37 }, 38 .result = ACCEPT, 39 .retval = 1, 40 }, 41 { 42 "dead code: end 1", 43 .insns = { 44 BPF_MOV64_IMM(BPF_REG_0, 7), 45 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1), 46 BPF_EXIT_INSN(), 47 BPF_EXIT_INSN(), 48 }, 49 .result = ACCEPT, 50 .retval = 7, 51 }, 52 { 53 "dead code: end 2", 54 .insns = { 55 BPF_MOV64_IMM(BPF_REG_0, 7), 56 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1), 57 BPF_EXIT_INSN(), 58 BPF_MOV64_IMM(BPF_REG_0, 12), 59 BPF_EXIT_INSN(), 60 }, 61 .result = ACCEPT, 62 .retval = 7, 63 }, 64 { 65 "dead code: end 3", 66 .insns = { 67 BPF_MOV64_IMM(BPF_REG_0, 7), 68 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1), 69 BPF_EXIT_INSN(), 70 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, 1), 71 BPF_JMP_IMM(BPF_JA, 0, 0, 1), 72 BPF_MOV64_IMM(BPF_REG_0, 12), 73 BPF_JMP_IMM(BPF_JA, 0, 0, -5), 74 }, 75 .result = ACCEPT, 76 .retval = 7, 77 }, 78 { 79 "dead code: tail of main + func", 80 .insns = { 81 BPF_MOV64_IMM(BPF_REG_0, 7), 82 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1), 83 BPF_EXIT_INSN(), 84 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1), 85 BPF_EXIT_INSN(), 86 BPF_MOV64_IMM(BPF_REG_0, 12), 87 BPF_EXIT_INSN(), 88 }, 89 .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for", 90 .result_unpriv = REJECT, 91 .result = ACCEPT, 92 .retval = 7, 93 }, 94 { 95 "dead code: tail of main + two functions", 96 .insns = { 97 BPF_MOV64_IMM(BPF_REG_0, 7), 98 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 8, 1), 99 BPF_EXIT_INSN(), 100 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1), 101 BPF_EXIT_INSN(), 102 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1), 103 BPF_EXIT_INSN(), 104 BPF_MOV64_IMM(BPF_REG_0, 12), 105 BPF_EXIT_INSN(), 106 }, 107 .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for", 108 .result_unpriv = REJECT, 109 .result = ACCEPT, 110 .retval = 7, 111 }, 112 { 113 "dead code: function in the middle and mid of another func", 114 .insns = { 115 BPF_MOV64_IMM(BPF_REG_1, 7), 116 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 3), 117 BPF_EXIT_INSN(), 118 BPF_MOV64_IMM(BPF_REG_0, 12), 119 BPF_EXIT_INSN(), 120 BPF_MOV64_IMM(BPF_REG_0, 7), 121 BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 7, 1), 122 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, -5), 123 BPF_EXIT_INSN(), 124 }, 125 .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for", 126 .result_unpriv = REJECT, 127 .result = ACCEPT, 128 .retval = 7, 129 }, 130 { 131 "dead code: middle of main before call", 132 .insns = { 133 BPF_MOV64_IMM(BPF_REG_1, 2), 134 BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 2, 1), 135 BPF_MOV64_IMM(BPF_REG_1, 5), 136 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1), 137 BPF_EXIT_INSN(), 138 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 139 BPF_EXIT_INSN(), 140 }, 141 .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for", 142 .result_unpriv = REJECT, 143 .result = ACCEPT, 144 .retval = 2, 145 }, 146 { 147 "dead code: start of a function", 148 .insns = { 149 BPF_MOV64_IMM(BPF_REG_1, 2), 150 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1), 151 BPF_EXIT_INSN(), 152 BPF_JMP_IMM(BPF_JA, 0, 0, 0), 153 BPF_MOV64_REG(BPF_REG_0, BPF_REG_1), 154 BPF_EXIT_INSN(), 155 }, 156 .errstr_unpriv = "loading/calling other bpf or kernel functions are allowed for", 157 .result_unpriv = REJECT, 158 .result = ACCEPT, 159 .retval = 2, 160 }, 161 { 162 "dead code: zero extension", 163 .insns = { 164 BPF_MOV64_IMM(BPF_REG_0, 0), 165 BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4), 166 BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 0, 1), 167 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_10, -4), 168 BPF_EXIT_INSN(), 169 }, 170 .result = ACCEPT, 171 .retval = 0, 172 }, 173