Commit d7a50913 authored by Daniel Borkmann's avatar Daniel Borkmann
Browse files

bpf: Update selftests to reflect new error states



Update various selftest error messages:

 * The 'Rx tried to sub from different maps, paths, or prohibited types'
   is reworked into more specific/differentiated error messages for better
   guidance.

 * The change into 'value -4294967168 makes map_value pointer be out of
   bounds' is due to moving the mixed bounds check into the speculation
   handling and thus occuring slightly later than above mentioned sanity
   check.

 * The change into 'math between map_value pointer and register with
   unbounded min value' is similarly due to register sanity check coming
   before the mixed bounds check.

 * The case of 'map access: known scalar += value_ptr from different maps'
   now loads fine given masks are the same from the different paths (despite
   max map value size being different).

Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Reviewed-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 7fedb63a
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -261,8 +261,6 @@
	},
	.fixup_map_hash_8b = { 3 },
	/* not actually fully unbounded, but the bound is very high */
	.errstr_unpriv = "R1 has unknown scalar with mixed signed bounds, pointer arithmetic with it prohibited for !root",
	.result_unpriv = REJECT,
	.errstr = "value -4294967168 makes map_value pointer be out of bounds",
	.result = REJECT,
},
@@ -298,9 +296,6 @@
	BPF_EXIT_INSN(),
	},
	.fixup_map_hash_8b = { 3 },
	/* not actually fully unbounded, but the bound is very high */
	.errstr_unpriv = "R1 has unknown scalar with mixed signed bounds, pointer arithmetic with it prohibited for !root",
	.result_unpriv = REJECT,
	.errstr = "value -4294967168 makes map_value pointer be out of bounds",
	.result = REJECT,
},
+11 −10
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@
		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
		BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types",
	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
	.errstr = "R0 tried to subtract pointer from scalar",
	.result = REJECT,
},
@@ -21,7 +21,7 @@
		BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0),
		BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R1 tried to sub from different maps, paths, or prohibited types",
	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
	.result_unpriv = REJECT,
	.result = ACCEPT,
	.retval = 1,
@@ -34,22 +34,23 @@
		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
		BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types",
	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
	.errstr = "R0 tried to subtract pointer from scalar",
	.result = REJECT,
},
{
	"check deducing bounds from const, 4",
	.insns = {
		BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
		BPF_MOV64_IMM(BPF_REG_0, 0),
		BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 0, 1),
		BPF_EXIT_INSN(),
		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1),
		BPF_EXIT_INSN(),
		BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0),
		BPF_ALU64_REG(BPF_SUB, BPF_REG_6, BPF_REG_0),
		BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R1 tried to sub from different maps, paths, or prohibited types",
	.errstr_unpriv = "R6 has pointer with unsupported alu operation",
	.result_unpriv = REJECT,
	.result = ACCEPT,
},
@@ -61,7 +62,7 @@
		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
		BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types",
	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
	.errstr = "R0 tried to subtract pointer from scalar",
	.result = REJECT,
},
@@ -74,7 +75,7 @@
		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
		BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types",
	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
	.errstr = "R0 tried to subtract pointer from scalar",
	.result = REJECT,
},
@@ -88,7 +89,7 @@
			    offsetof(struct __sk_buff, mark)),
		BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R1 tried to sub from different maps, paths, or prohibited types",
	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
	.errstr = "dereference of modified ctx ptr",
	.result = REJECT,
	.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
@@ -103,7 +104,7 @@
			    offsetof(struct __sk_buff, mark)),
		BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R1 tried to add from different maps, paths, or prohibited types",
	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
	.errstr = "dereference of modified ctx ptr",
	.result = REJECT,
	.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
@@ -116,7 +117,7 @@
		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
		BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types",
	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
	.errstr = "R0 tried to subtract pointer from scalar",
	.result = REJECT,
},
+0 −13
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@
	},
	.fixup_map_hash_8b = { 3 },
	.errstr = "unbounded min value",
	.errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
	.result = REJECT,
},
{
@@ -43,7 +42,6 @@
	},
	.fixup_map_hash_8b = { 3 },
	.errstr = "unbounded min value",
	.errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
	.result = REJECT,
},
{
@@ -69,7 +67,6 @@
	},
	.fixup_map_hash_8b = { 3 },
	.errstr = "unbounded min value",
	.errstr_unpriv = "R8 has unknown scalar with mixed signed bounds",
	.result = REJECT,
},
{
@@ -94,7 +91,6 @@
	},
	.fixup_map_hash_8b = { 3 },
	.errstr = "unbounded min value",
	.errstr_unpriv = "R8 has unknown scalar with mixed signed bounds",
	.result = REJECT,
},
{
@@ -141,7 +137,6 @@
	},
	.fixup_map_hash_8b = { 3 },
	.errstr = "unbounded min value",
	.errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
	.result = REJECT,
},
{
@@ -210,7 +205,6 @@
	},
	.fixup_map_hash_8b = { 3 },
	.errstr = "unbounded min value",
	.errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
	.result = REJECT,
},
{
@@ -260,7 +254,6 @@
	},
	.fixup_map_hash_8b = { 3 },
	.errstr = "unbounded min value",
	.errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
	.result = REJECT,
},
{
@@ -287,7 +280,6 @@
	},
	.fixup_map_hash_8b = { 3 },
	.errstr = "unbounded min value",
	.errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
	.result = REJECT,
},
{
@@ -313,7 +305,6 @@
	},
	.fixup_map_hash_8b = { 3 },
	.errstr = "unbounded min value",
	.errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
	.result = REJECT,
},
{
@@ -342,7 +333,6 @@
	},
	.fixup_map_hash_8b = { 3 },
	.errstr = "unbounded min value",
	.errstr_unpriv = "R7 has unknown scalar with mixed signed bounds",
	.result = REJECT,
},
{
@@ -372,7 +362,6 @@
	},
	.fixup_map_hash_8b = { 4 },
	.errstr = "unbounded min value",
	.errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
	.result = REJECT,
},
{
@@ -400,7 +389,5 @@
	},
	.fixup_map_hash_8b = { 3 },
	.errstr = "unbounded min value",
	.errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
	.result = REJECT,
	.result_unpriv = REJECT,
},
+2 −2
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@
	},
	.fixup_map_hash_16b = { 4 },
	.result_unpriv = REJECT,
	.errstr_unpriv = "R1 tried to add from different maps, paths, or prohibited types",
	.errstr_unpriv = "R1 has pointer with unsupported alu operation",
	.result = ACCEPT,
},
{
@@ -94,6 +94,6 @@
	},
	.fixup_map_hash_16b = { 4 },
	.result_unpriv = REJECT,
	.errstr_unpriv = "R1 tried to add from different maps, paths, or prohibited types",
	.errstr_unpriv = "R0 has pointer with unsupported alu operation",
	.result = ACCEPT,
},
+1 −1
Original line number Diff line number Diff line
@@ -505,7 +505,7 @@
	BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, -8),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R1 tried to add from different maps, paths, or prohibited types",
	.errstr_unpriv = "R1 stack pointer arithmetic goes out of range",
	.result_unpriv = REJECT,
	.result = ACCEPT,
},
Loading