root/tools/testing/selftests/bpf/verifier/dead_code.c

/* [<][>][^][v][top][bottom][index][help] */
   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 root only",
  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 root only",
 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 root only",
 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 root only",
 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 root only",
 156         .result_unpriv = REJECT,
 157         .result = ACCEPT,
 158         .retval = 2,
 159 },

/* [<][>][^][v][top][bottom][index][help] */