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

/* [<][>][^][v][top][bottom][index][help] */
   1 {
   2         "bounds checks mixing signed and unsigned, positive bounds",
   3         .insns = {
   4         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
   5         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
   6         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
   7         BPF_LD_MAP_FD(BPF_REG_1, 0),
   8         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
   9         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 7),
  10         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
  11         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
  12         BPF_MOV64_IMM(BPF_REG_2, 2),
  13         BPF_JMP_REG(BPF_JGE, BPF_REG_2, BPF_REG_1, 3),
  14         BPF_JMP_IMM(BPF_JSGT, BPF_REG_1, 4, 2),
  15         BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1),
  16         BPF_ST_MEM(BPF_B, BPF_REG_0, 0, 0),
  17         BPF_MOV64_IMM(BPF_REG_0, 0),
  18         BPF_EXIT_INSN(),
  19         },
  20         .fixup_map_hash_8b = { 3 },
  21         .errstr = "unbounded min value",
  22         .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
  23         .result = REJECT,
  24 },
  25 {
  26         "bounds checks mixing signed and unsigned",
  27         .insns = {
  28         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
  29         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
  30         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
  31         BPF_LD_MAP_FD(BPF_REG_1, 0),
  32         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
  33         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 7),
  34         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
  35         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
  36         BPF_MOV64_IMM(BPF_REG_2, -1),
  37         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_2, 3),
  38         BPF_JMP_IMM(BPF_JSGT, BPF_REG_1, 1, 2),
  39         BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1),
  40         BPF_ST_MEM(BPF_B, BPF_REG_0, 0, 0),
  41         BPF_MOV64_IMM(BPF_REG_0, 0),
  42         BPF_EXIT_INSN(),
  43         },
  44         .fixup_map_hash_8b = { 3 },
  45         .errstr = "unbounded min value",
  46         .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
  47         .result = REJECT,
  48 },
  49 {
  50         "bounds checks mixing signed and unsigned, variant 2",
  51         .insns = {
  52         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
  53         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
  54         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
  55         BPF_LD_MAP_FD(BPF_REG_1, 0),
  56         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
  57         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 9),
  58         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
  59         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
  60         BPF_MOV64_IMM(BPF_REG_2, -1),
  61         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_2, 5),
  62         BPF_MOV64_IMM(BPF_REG_8, 0),
  63         BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_1),
  64         BPF_JMP_IMM(BPF_JSGT, BPF_REG_8, 1, 2),
  65         BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_8),
  66         BPF_ST_MEM(BPF_B, BPF_REG_8, 0, 0),
  67         BPF_MOV64_IMM(BPF_REG_0, 0),
  68         BPF_EXIT_INSN(),
  69         },
  70         .fixup_map_hash_8b = { 3 },
  71         .errstr = "unbounded min value",
  72         .errstr_unpriv = "R8 has unknown scalar with mixed signed bounds",
  73         .result = REJECT,
  74 },
  75 {
  76         "bounds checks mixing signed and unsigned, variant 3",
  77         .insns = {
  78         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
  79         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
  80         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
  81         BPF_LD_MAP_FD(BPF_REG_1, 0),
  82         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
  83         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 8),
  84         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
  85         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
  86         BPF_MOV64_IMM(BPF_REG_2, -1),
  87         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_2, 4),
  88         BPF_MOV64_REG(BPF_REG_8, BPF_REG_1),
  89         BPF_JMP_IMM(BPF_JSGT, BPF_REG_8, 1, 2),
  90         BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_8),
  91         BPF_ST_MEM(BPF_B, BPF_REG_8, 0, 0),
  92         BPF_MOV64_IMM(BPF_REG_0, 0),
  93         BPF_EXIT_INSN(),
  94         },
  95         .fixup_map_hash_8b = { 3 },
  96         .errstr = "unbounded min value",
  97         .errstr_unpriv = "R8 has unknown scalar with mixed signed bounds",
  98         .result = REJECT,
  99 },
 100 {
 101         "bounds checks mixing signed and unsigned, variant 4",
 102         .insns = {
 103         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
 104         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
 105         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
 106         BPF_LD_MAP_FD(BPF_REG_1, 0),
 107         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 108         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 7),
 109         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
 110         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
 111         BPF_MOV64_IMM(BPF_REG_2, 1),
 112         BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
 113         BPF_JMP_IMM(BPF_JSGT, BPF_REG_1, 1, 2),
 114         BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1),
 115         BPF_ST_MEM(BPF_B, BPF_REG_0, 0, 0),
 116         BPF_MOV64_IMM(BPF_REG_0, 0),
 117         BPF_EXIT_INSN(),
 118         },
 119         .fixup_map_hash_8b = { 3 },
 120         .result = ACCEPT,
 121 },
 122 {
 123         "bounds checks mixing signed and unsigned, variant 5",
 124         .insns = {
 125         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
 126         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
 127         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
 128         BPF_LD_MAP_FD(BPF_REG_1, 0),
 129         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 130         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 9),
 131         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
 132         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
 133         BPF_MOV64_IMM(BPF_REG_2, -1),
 134         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_2, 5),
 135         BPF_JMP_IMM(BPF_JSGT, BPF_REG_1, 1, 4),
 136         BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 4),
 137         BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
 138         BPF_ST_MEM(BPF_B, BPF_REG_0, 0, 0),
 139         BPF_MOV64_IMM(BPF_REG_0, 0),
 140         BPF_EXIT_INSN(),
 141         },
 142         .fixup_map_hash_8b = { 3 },
 143         .errstr = "unbounded min value",
 144         .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
 145         .result = REJECT,
 146 },
 147 {
 148         "bounds checks mixing signed and unsigned, variant 6",
 149         .insns = {
 150         BPF_MOV64_IMM(BPF_REG_2, 0),
 151         BPF_MOV64_REG(BPF_REG_3, BPF_REG_10),
 152         BPF_ALU64_IMM(BPF_ADD, BPF_REG_3, -512),
 153         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
 154         BPF_LDX_MEM(BPF_DW, BPF_REG_4, BPF_REG_10, -16),
 155         BPF_MOV64_IMM(BPF_REG_6, -1),
 156         BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_6, 5),
 157         BPF_JMP_IMM(BPF_JSGT, BPF_REG_4, 1, 4),
 158         BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 1),
 159         BPF_MOV64_IMM(BPF_REG_5, 0),
 160         BPF_ST_MEM(BPF_H, BPF_REG_10, -512, 0),
 161         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
 162         BPF_MOV64_IMM(BPF_REG_0, 0),
 163         BPF_EXIT_INSN(),
 164         },
 165         .errstr = "R4 min value is negative, either use unsigned",
 166         .result = REJECT,
 167 },
 168 {
 169         "bounds checks mixing signed and unsigned, variant 7",
 170         .insns = {
 171         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
 172         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
 173         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
 174         BPF_LD_MAP_FD(BPF_REG_1, 0),
 175         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 176         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 7),
 177         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
 178         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
 179         BPF_MOV64_IMM(BPF_REG_2, 1024 * 1024 * 1024),
 180         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_2, 3),
 181         BPF_JMP_IMM(BPF_JSGT, BPF_REG_1, 1, 2),
 182         BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1),
 183         BPF_ST_MEM(BPF_B, BPF_REG_0, 0, 0),
 184         BPF_MOV64_IMM(BPF_REG_0, 0),
 185         BPF_EXIT_INSN(),
 186         },
 187         .fixup_map_hash_8b = { 3 },
 188         .result = ACCEPT,
 189 },
 190 {
 191         "bounds checks mixing signed and unsigned, variant 8",
 192         .insns = {
 193         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
 194         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
 195         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
 196         BPF_LD_MAP_FD(BPF_REG_1, 0),
 197         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 198         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 9),
 199         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
 200         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
 201         BPF_MOV64_IMM(BPF_REG_2, -1),
 202         BPF_JMP_REG(BPF_JGT, BPF_REG_2, BPF_REG_1, 2),
 203         BPF_MOV64_IMM(BPF_REG_0, 0),
 204         BPF_EXIT_INSN(),
 205         BPF_JMP_IMM(BPF_JSGT, BPF_REG_1, 1, 2),
 206         BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1),
 207         BPF_ST_MEM(BPF_B, BPF_REG_0, 0, 0),
 208         BPF_MOV64_IMM(BPF_REG_0, 0),
 209         BPF_EXIT_INSN(),
 210         },
 211         .fixup_map_hash_8b = { 3 },
 212         .errstr = "unbounded min value",
 213         .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
 214         .result = REJECT,
 215 },
 216 {
 217         "bounds checks mixing signed and unsigned, variant 9",
 218         .insns = {
 219         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
 220         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
 221         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
 222         BPF_LD_MAP_FD(BPF_REG_1, 0),
 223         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 224         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 10),
 225         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
 226         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
 227         BPF_LD_IMM64(BPF_REG_2, -9223372036854775808ULL),
 228         BPF_JMP_REG(BPF_JGT, BPF_REG_2, BPF_REG_1, 2),
 229         BPF_MOV64_IMM(BPF_REG_0, 0),
 230         BPF_EXIT_INSN(),
 231         BPF_JMP_IMM(BPF_JSGT, BPF_REG_1, 1, 2),
 232         BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1),
 233         BPF_ST_MEM(BPF_B, BPF_REG_0, 0, 0),
 234         BPF_MOV64_IMM(BPF_REG_0, 0),
 235         BPF_EXIT_INSN(),
 236         },
 237         .fixup_map_hash_8b = { 3 },
 238         .result = ACCEPT,
 239 },
 240 {
 241         "bounds checks mixing signed and unsigned, variant 10",
 242         .insns = {
 243         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
 244         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
 245         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
 246         BPF_LD_MAP_FD(BPF_REG_1, 0),
 247         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 248         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 9),
 249         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
 250         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
 251         BPF_MOV64_IMM(BPF_REG_2, 0),
 252         BPF_JMP_REG(BPF_JGT, BPF_REG_2, BPF_REG_1, 2),
 253         BPF_MOV64_IMM(BPF_REG_0, 0),
 254         BPF_EXIT_INSN(),
 255         BPF_JMP_IMM(BPF_JSGT, BPF_REG_1, 1, 2),
 256         BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1),
 257         BPF_ST_MEM(BPF_B, BPF_REG_0, 0, 0),
 258         BPF_MOV64_IMM(BPF_REG_0, 0),
 259         BPF_EXIT_INSN(),
 260         },
 261         .fixup_map_hash_8b = { 3 },
 262         .errstr = "unbounded min value",
 263         .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
 264         .result = REJECT,
 265 },
 266 {
 267         "bounds checks mixing signed and unsigned, variant 11",
 268         .insns = {
 269         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
 270         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
 271         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
 272         BPF_LD_MAP_FD(BPF_REG_1, 0),
 273         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 274         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 9),
 275         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
 276         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
 277         BPF_MOV64_IMM(BPF_REG_2, -1),
 278         BPF_JMP_REG(BPF_JGE, BPF_REG_2, BPF_REG_1, 2),
 279         /* Dead branch. */
 280         BPF_MOV64_IMM(BPF_REG_0, 0),
 281         BPF_EXIT_INSN(),
 282         BPF_JMP_IMM(BPF_JSGT, BPF_REG_1, 1, 2),
 283         BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1),
 284         BPF_ST_MEM(BPF_B, BPF_REG_0, 0, 0),
 285         BPF_MOV64_IMM(BPF_REG_0, 0),
 286         BPF_EXIT_INSN(),
 287         },
 288         .fixup_map_hash_8b = { 3 },
 289         .errstr = "unbounded min value",
 290         .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
 291         .result = REJECT,
 292 },
 293 {
 294         "bounds checks mixing signed and unsigned, variant 12",
 295         .insns = {
 296         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
 297         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
 298         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
 299         BPF_LD_MAP_FD(BPF_REG_1, 0),
 300         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 301         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 9),
 302         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
 303         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
 304         BPF_MOV64_IMM(BPF_REG_2, -6),
 305         BPF_JMP_REG(BPF_JGE, BPF_REG_2, BPF_REG_1, 2),
 306         BPF_MOV64_IMM(BPF_REG_0, 0),
 307         BPF_EXIT_INSN(),
 308         BPF_JMP_IMM(BPF_JSGT, BPF_REG_1, 1, 2),
 309         BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1),
 310         BPF_ST_MEM(BPF_B, BPF_REG_0, 0, 0),
 311         BPF_MOV64_IMM(BPF_REG_0, 0),
 312         BPF_EXIT_INSN(),
 313         },
 314         .fixup_map_hash_8b = { 3 },
 315         .errstr = "unbounded min value",
 316         .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
 317         .result = REJECT,
 318 },
 319 {
 320         "bounds checks mixing signed and unsigned, variant 13",
 321         .insns = {
 322         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
 323         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
 324         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
 325         BPF_LD_MAP_FD(BPF_REG_1, 0),
 326         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 327         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 6),
 328         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
 329         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
 330         BPF_MOV64_IMM(BPF_REG_2, 2),
 331         BPF_JMP_REG(BPF_JGE, BPF_REG_2, BPF_REG_1, 2),
 332         BPF_MOV64_IMM(BPF_REG_7, 1),
 333         BPF_JMP_IMM(BPF_JSGT, BPF_REG_7, 0, 2),
 334         BPF_MOV64_IMM(BPF_REG_0, 0),
 335         BPF_EXIT_INSN(),
 336         BPF_ALU64_REG(BPF_ADD, BPF_REG_7, BPF_REG_1),
 337         BPF_JMP_IMM(BPF_JSGT, BPF_REG_7, 4, 2),
 338         BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_7),
 339         BPF_ST_MEM(BPF_B, BPF_REG_0, 0, 0),
 340         BPF_MOV64_IMM(BPF_REG_0, 0),
 341         BPF_EXIT_INSN(),
 342         },
 343         .fixup_map_hash_8b = { 3 },
 344         .errstr = "unbounded min value",
 345         .errstr_unpriv = "R7 has unknown scalar with mixed signed bounds",
 346         .result = REJECT,
 347 },
 348 {
 349         "bounds checks mixing signed and unsigned, variant 14",
 350         .insns = {
 351         BPF_LDX_MEM(BPF_W, BPF_REG_9, BPF_REG_1,
 352                     offsetof(struct __sk_buff, mark)),
 353         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
 354         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
 355         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
 356         BPF_LD_MAP_FD(BPF_REG_1, 0),
 357         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 358         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 8),
 359         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
 360         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
 361         BPF_MOV64_IMM(BPF_REG_2, -1),
 362         BPF_MOV64_IMM(BPF_REG_8, 2),
 363         BPF_JMP_IMM(BPF_JEQ, BPF_REG_9, 42, 6),
 364         BPF_JMP_REG(BPF_JSGT, BPF_REG_8, BPF_REG_1, 3),
 365         BPF_JMP_IMM(BPF_JSGT, BPF_REG_1, 1, 2),
 366         BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1),
 367         BPF_ST_MEM(BPF_B, BPF_REG_0, 0, 0),
 368         BPF_MOV64_IMM(BPF_REG_0, 0),
 369         BPF_EXIT_INSN(),
 370         BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_2, -3),
 371         BPF_JMP_IMM(BPF_JA, 0, 0, -7),
 372         },
 373         .fixup_map_hash_8b = { 4 },
 374         .errstr = "unbounded min value",
 375         .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
 376         .result = REJECT,
 377 },
 378 {
 379         "bounds checks mixing signed and unsigned, variant 15",
 380         .insns = {
 381         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
 382         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
 383         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
 384         BPF_LD_MAP_FD(BPF_REG_1, 0),
 385         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 386         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 4),
 387         BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, -8),
 388         BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -16),
 389         BPF_MOV64_IMM(BPF_REG_2, -6),
 390         BPF_JMP_REG(BPF_JGE, BPF_REG_2, BPF_REG_1, 2),
 391         BPF_MOV64_IMM(BPF_REG_0, 0),
 392         BPF_EXIT_INSN(),
 393         BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1),
 394         BPF_JMP_IMM(BPF_JGT, BPF_REG_0, 1, 2),
 395         BPF_MOV64_IMM(BPF_REG_0, 0),
 396         BPF_EXIT_INSN(),
 397         BPF_ST_MEM(BPF_B, BPF_REG_0, 0, 0),
 398         BPF_MOV64_IMM(BPF_REG_0, 0),
 399         BPF_EXIT_INSN(),
 400         },
 401         .fixup_map_hash_8b = { 3 },
 402         .errstr = "unbounded min value",
 403         .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
 404         .result = REJECT,
 405         .result_unpriv = REJECT,
 406 },

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