Commit 973377ff authored by Daniel Borkmann's avatar Daniel Borkmann
Browse files

bpf, selftests: Adjust few selftest outcomes wrt unreachable code



In almost all cases from test_verifier that have been changed in here, we've
had an unreachable path with a load from a register which has an invalid
address on purpose. This was basically to make sure that we never walk this
path and to have the verifier complain if it would otherwise. Change it to
match on the right error for unprivileged given we now test these paths
under speculative execution.

There's one case where we match on exact # of insns_processed. Due to the
extra path, this will of course mismatch on unprivileged. Thus, restrict the
test->insn_processed check to privileged-only.

In one other case, we result in a 'pointer comparison prohibited' error. This
is similarly due to verifying an 'invalid' branch where we end up with a value
pointer on one side of the comparison.

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 9183671a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1147,7 +1147,7 @@ static void do_test_single(struct bpf_test *test, bool unpriv,
		}
	}

	if (test->insn_processed) {
	if (!unpriv && test->insn_processed) {
		uint32_t insn_processed;
		char *proc;

+2 −0
Original line number Diff line number Diff line
@@ -61,6 +61,8 @@
	BPF_MOV64_IMM(BPF_REG_0, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R1 !read_ok",
	.result_unpriv = REJECT,
	.result = ACCEPT,
	.retval = 0
},
+14 −0
Original line number Diff line number Diff line
@@ -508,6 +508,8 @@
	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, -1),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 invalid mem access 'inv'",
	.result_unpriv = REJECT,
	.result = ACCEPT
},
{
@@ -528,6 +530,8 @@
	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, -1),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 invalid mem access 'inv'",
	.result_unpriv = REJECT,
	.result = ACCEPT
},
{
@@ -569,6 +573,8 @@
	BPF_MOV64_IMM(BPF_REG_0, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 min value is outside of the allowed memory range",
	.result_unpriv = REJECT,
	.fixup_map_hash_8b = { 3 },
	.result = ACCEPT,
},
@@ -589,6 +595,8 @@
	BPF_MOV64_IMM(BPF_REG_0, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 min value is outside of the allowed memory range",
	.result_unpriv = REJECT,
	.fixup_map_hash_8b = { 3 },
	.result = ACCEPT,
},
@@ -609,6 +617,8 @@
	BPF_MOV64_IMM(BPF_REG_0, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 min value is outside of the allowed memory range",
	.result_unpriv = REJECT,
	.fixup_map_hash_8b = { 3 },
	.result = ACCEPT,
},
@@ -674,6 +684,8 @@
	BPF_MOV64_IMM(BPF_REG_0, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 min value is outside of the allowed memory range",
	.result_unpriv = REJECT,
	.fixup_map_hash_8b = { 3 },
	.result = ACCEPT,
},
@@ -695,6 +707,8 @@
	BPF_MOV64_IMM(BPF_REG_0, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 min value is outside of the allowed memory range",
	.result_unpriv = REJECT,
	.fixup_map_hash_8b = { 3 },
	.result = ACCEPT,
},
+2 −0
Original line number Diff line number Diff line
@@ -8,6 +8,8 @@
	BPF_JMP_IMM(BPF_JGE, BPF_REG_0, 10, -4),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R9 !read_ok",
	.result_unpriv = REJECT,
	.result = ACCEPT,
	.retval = 7,
},
+22 −0
Original line number Diff line number Diff line
@@ -87,6 +87,8 @@
	BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R9 !read_ok",
	.result_unpriv = REJECT,
	.result = ACCEPT,
},
{
@@ -150,6 +152,8 @@
	BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R9 !read_ok",
	.result_unpriv = REJECT,
	.result = ACCEPT,
},
{
@@ -213,6 +217,8 @@
	BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R9 !read_ok",
	.result_unpriv = REJECT,
	.result = ACCEPT,
},
{
@@ -280,6 +286,8 @@
	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 invalid mem access 'inv'",
	.result_unpriv = REJECT,
	.result = ACCEPT,
	.retval = 2,
},
@@ -348,6 +356,8 @@
	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 invalid mem access 'inv'",
	.result_unpriv = REJECT,
	.result = ACCEPT,
	.retval = 2,
},
@@ -416,6 +426,8 @@
	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 invalid mem access 'inv'",
	.result_unpriv = REJECT,
	.result = ACCEPT,
	.retval = 2,
},
@@ -484,6 +496,8 @@
	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 invalid mem access 'inv'",
	.result_unpriv = REJECT,
	.result = ACCEPT,
	.retval = 2,
},
@@ -552,6 +566,8 @@
	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 invalid mem access 'inv'",
	.result_unpriv = REJECT,
	.result = ACCEPT,
	.retval = 2,
},
@@ -620,6 +636,8 @@
	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 invalid mem access 'inv'",
	.result_unpriv = REJECT,
	.result = ACCEPT,
	.retval = 2,
},
@@ -688,6 +706,8 @@
	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 invalid mem access 'inv'",
	.result_unpriv = REJECT,
	.result = ACCEPT,
	.retval = 2,
},
@@ -756,6 +776,8 @@
	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
	BPF_EXIT_INSN(),
	},
	.errstr_unpriv = "R0 invalid mem access 'inv'",
	.result_unpriv = REJECT,
	.result = ACCEPT,
	.retval = 2,
},
Loading