bounds_deduction.c (3894B)
1{ 2 "check deducing bounds from const, 1", 3 .insns = { 4 BPF_MOV64_IMM(BPF_REG_0, 1), 5 BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 1, 0), 6 BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1), 7 BPF_EXIT_INSN(), 8 }, 9 .errstr_unpriv = "R1 has pointer with unsupported alu operation", 10 .errstr = "R0 tried to subtract pointer from scalar", 11 .result = REJECT, 12}, 13{ 14 "check deducing bounds from const, 2", 15 .insns = { 16 BPF_MOV64_IMM(BPF_REG_0, 1), 17 BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 1, 1), 18 BPF_EXIT_INSN(), 19 BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 1, 1), 20 BPF_EXIT_INSN(), 21 BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0), 22 BPF_EXIT_INSN(), 23 }, 24 .errstr_unpriv = "R1 has pointer with unsupported alu operation", 25 .result_unpriv = REJECT, 26 .result = ACCEPT, 27 .retval = 1, 28}, 29{ 30 "check deducing bounds from const, 3", 31 .insns = { 32 BPF_MOV64_IMM(BPF_REG_0, 0), 33 BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 0, 0), 34 BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1), 35 BPF_EXIT_INSN(), 36 }, 37 .errstr_unpriv = "R1 has pointer with unsupported alu operation", 38 .errstr = "R0 tried to subtract pointer from scalar", 39 .result = REJECT, 40}, 41{ 42 "check deducing bounds from const, 4", 43 .insns = { 44 BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), 45 BPF_MOV64_IMM(BPF_REG_0, 0), 46 BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 0, 1), 47 BPF_EXIT_INSN(), 48 BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1), 49 BPF_EXIT_INSN(), 50 BPF_ALU64_REG(BPF_SUB, BPF_REG_6, BPF_REG_0), 51 BPF_EXIT_INSN(), 52 }, 53 .errstr_unpriv = "R6 has pointer with unsupported alu operation", 54 .result_unpriv = REJECT, 55 .result = ACCEPT, 56}, 57{ 58 "check deducing bounds from const, 5", 59 .insns = { 60 BPF_MOV64_IMM(BPF_REG_0, 0), 61 BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 1, 1), 62 BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1), 63 BPF_EXIT_INSN(), 64 }, 65 .errstr_unpriv = "R1 has pointer with unsupported alu operation", 66 .errstr = "R0 tried to subtract pointer from scalar", 67 .result = REJECT, 68}, 69{ 70 "check deducing bounds from const, 6", 71 .insns = { 72 BPF_MOV64_IMM(BPF_REG_0, 0), 73 BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1), 74 BPF_EXIT_INSN(), 75 BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1), 76 BPF_EXIT_INSN(), 77 }, 78 .errstr_unpriv = "R1 has pointer with unsupported alu operation", 79 .errstr = "R0 tried to subtract pointer from scalar", 80 .result = REJECT, 81}, 82{ 83 "check deducing bounds from const, 7", 84 .insns = { 85 BPF_MOV64_IMM(BPF_REG_0, ~0), 86 BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 0), 87 BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0), 88 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 89 offsetof(struct __sk_buff, mark)), 90 BPF_EXIT_INSN(), 91 }, 92 .errstr_unpriv = "R1 has pointer with unsupported alu operation", 93 .errstr = "dereference of modified ctx ptr", 94 .result = REJECT, 95 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 96}, 97{ 98 "check deducing bounds from const, 8", 99 .insns = { 100 BPF_MOV64_IMM(BPF_REG_0, ~0), 101 BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1), 102 BPF_ALU64_REG(BPF_ADD, BPF_REG_1, BPF_REG_0), 103 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 104 offsetof(struct __sk_buff, mark)), 105 BPF_EXIT_INSN(), 106 }, 107 .errstr_unpriv = "R1 has pointer with unsupported alu operation", 108 .errstr = "negative offset ctx ptr R1 off=-1 disallowed", 109 .result = REJECT, 110 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 111}, 112{ 113 "check deducing bounds from const, 9", 114 .insns = { 115 BPF_MOV64_IMM(BPF_REG_0, 0), 116 BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 0), 117 BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1), 118 BPF_EXIT_INSN(), 119 }, 120 .errstr_unpriv = "R1 has pointer with unsupported alu operation", 121 .errstr = "R0 tried to subtract pointer from scalar", 122 .result = REJECT, 123}, 124{ 125 "check deducing bounds from const, 10", 126 .insns = { 127 BPF_MOV64_IMM(BPF_REG_0, 0), 128 BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 0, 0), 129 /* Marks reg as unknown. */ 130 BPF_ALU64_IMM(BPF_NEG, BPF_REG_0, 0), 131 BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1), 132 BPF_EXIT_INSN(), 133 }, 134 .errstr = "math between ctx pointer and register with unbounded min value is not allowed", 135 .result = REJECT, 136},