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