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