Message ID | 20201006231706.2744579-1-haoluo@google.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | BPF |
Headers | show |
Series | bpf: Fix test_verifier after introducing resolve_pseudo_ldimm64 | expand |
On Tue, Oct 6, 2020 at 4:45 PM Hao Luo <haoluo@google.com> wrote: > > Commit 4976b718c355 ("bpf: Introduce pseudo_btf_id") switched > the order of check_subprogs() and resolve_pseudo_ldimm() in > the verifier. Now an empty prog and the prog of a single > invalid ldimm expect to see the error "last insn is not an > exit or jmp" instead, because the check for subprogs comes > first. Fix the expection of the error message. > > Tested: > # ./test_verifier > Summary: 1130 PASSED, 538 SKIPPED, 0 FAILED > and the full set of bpf selftests. > > Fixes: 4976b718c355 ("bpf: Introduce pseudo_btf_id") > Signed-off-by: Hao Luo <haoluo@google.com> > --- > tools/testing/selftests/bpf/verifier/basic.c | 2 +- > tools/testing/selftests/bpf/verifier/ld_imm64.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/tools/testing/selftests/bpf/verifier/basic.c b/tools/testing/selftests/bpf/verifier/basic.c > index b8d18642653a..de84f0d57082 100644 > --- a/tools/testing/selftests/bpf/verifier/basic.c > +++ b/tools/testing/selftests/bpf/verifier/basic.c > @@ -2,7 +2,7 @@ > "empty prog", > .insns = { > }, > - .errstr = "unknown opcode 00", > + .errstr = "last insn is not an exit or jmp", in this case the new message makes more sense, so this is a good change > .result = REJECT, > }, > { > diff --git a/tools/testing/selftests/bpf/verifier/ld_imm64.c b/tools/testing/selftests/bpf/verifier/ld_imm64.c > index 3856dba733e9..f300ba62edd0 100644 > --- a/tools/testing/selftests/bpf/verifier/ld_imm64.c > +++ b/tools/testing/selftests/bpf/verifier/ld_imm64.c > @@ -55,7 +55,7 @@ > .insns = { > BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 0), > }, > - .errstr = "invalid bpf_ld_imm64 insn", > + .errstr = "last insn is not an exit or jmp", but this completely defeats the purpose of the test; better add BPF_EXIT_INSN() after ldimm64 instruction to actually get to validation of ldimm64 > .result = REJECT, > }, > { > -- > 2.28.0.806.g8561365e88-goog >
On Tue, Oct 6, 2020 at 5:43 PM Andrii Nakryiko <andrii.nakryiko@gmail.com> wrote: > > On Tue, Oct 6, 2020 at 4:45 PM Hao Luo <haoluo@google.com> wrote: > > > > Commit 4976b718c355 ("bpf: Introduce pseudo_btf_id") switched > > the order of check_subprogs() and resolve_pseudo_ldimm() in > > the verifier. Now an empty prog and the prog of a single > > invalid ldimm expect to see the error "last insn is not an > > exit or jmp" instead, because the check for subprogs comes > > first. Fix the expection of the error message. > > > > Tested: > > # ./test_verifier > > Summary: 1130 PASSED, 538 SKIPPED, 0 FAILED > > and the full set of bpf selftests. > > > > Fixes: 4976b718c355 ("bpf: Introduce pseudo_btf_id") > > Signed-off-by: Hao Luo <haoluo@google.com> > > --- [...] > > diff --git a/tools/testing/selftests/bpf/verifier/ld_imm64.c b/tools/testing/selftests/bpf/verifier/ld_imm64.c > > index 3856dba733e9..f300ba62edd0 100644 > > --- a/tools/testing/selftests/bpf/verifier/ld_imm64.c > > +++ b/tools/testing/selftests/bpf/verifier/ld_imm64.c > > @@ -55,7 +55,7 @@ > > .insns = { > > BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 0), > > }, > > - .errstr = "invalid bpf_ld_imm64 insn", > > + .errstr = "last insn is not an exit or jmp", > > but this completely defeats the purpose of the test; better add > BPF_EXIT_INSN() after ldimm64 instruction to actually get to > validation of ldimm64 > Actually there is already a test (test4) that covers this case. So it makes sense to remove it, I think. I will resend with this change. > > .result = REJECT, > > }, > > { > > -- > > 2.28.0.806.g8561365e88-goog > >
On Tue, Oct 6, 2020 at 5:51 PM Hao Luo <haoluo@google.com> wrote: > > On Tue, Oct 6, 2020 at 5:43 PM Andrii Nakryiko > <andrii.nakryiko@gmail.com> wrote: > > > > On Tue, Oct 6, 2020 at 4:45 PM Hao Luo <haoluo@google.com> wrote: > > > > > > Commit 4976b718c355 ("bpf: Introduce pseudo_btf_id") switched > > > the order of check_subprogs() and resolve_pseudo_ldimm() in > > > the verifier. Now an empty prog and the prog of a single > > > invalid ldimm expect to see the error "last insn is not an > > > exit or jmp" instead, because the check for subprogs comes > > > first. Fix the expection of the error message. > > > > > > Tested: > > > # ./test_verifier > > > Summary: 1130 PASSED, 538 SKIPPED, 0 FAILED > > > and the full set of bpf selftests. > > > > > > Fixes: 4976b718c355 ("bpf: Introduce pseudo_btf_id") > > > Signed-off-by: Hao Luo <haoluo@google.com> > > > --- > [...] > > > diff --git a/tools/testing/selftests/bpf/verifier/ld_imm64.c b/tools/testing/selftests/bpf/verifier/ld_imm64.c > > > index 3856dba733e9..f300ba62edd0 100644 > > > --- a/tools/testing/selftests/bpf/verifier/ld_imm64.c > > > +++ b/tools/testing/selftests/bpf/verifier/ld_imm64.c > > > @@ -55,7 +55,7 @@ > > > .insns = { > > > BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 0), > > > }, > > > - .errstr = "invalid bpf_ld_imm64 insn", > > > + .errstr = "last insn is not an exit or jmp", > > > > but this completely defeats the purpose of the test; better add > > BPF_EXIT_INSN() after ldimm64 instruction to actually get to > > validation of ldimm64 > > > > Actually there is already a test (test4) that covers this case. So it > makes sense to remove it, I think. I will resend with this change. ah, this test validates that half of ldimm64 at the very end won't cause any troubles to verifier... Yeah, I guess now it's pointless because it can never be the very last instruction. > > > > .result = REJECT, > > > }, > > > { > > > -- > > > 2.28.0.806.g8561365e88-goog > > >
diff --git a/tools/testing/selftests/bpf/verifier/basic.c b/tools/testing/selftests/bpf/verifier/basic.c index b8d18642653a..de84f0d57082 100644 --- a/tools/testing/selftests/bpf/verifier/basic.c +++ b/tools/testing/selftests/bpf/verifier/basic.c @@ -2,7 +2,7 @@ "empty prog", .insns = { }, - .errstr = "unknown opcode 00", + .errstr = "last insn is not an exit or jmp", .result = REJECT, }, { diff --git a/tools/testing/selftests/bpf/verifier/ld_imm64.c b/tools/testing/selftests/bpf/verifier/ld_imm64.c index 3856dba733e9..f300ba62edd0 100644 --- a/tools/testing/selftests/bpf/verifier/ld_imm64.c +++ b/tools/testing/selftests/bpf/verifier/ld_imm64.c @@ -55,7 +55,7 @@ .insns = { BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 0), }, - .errstr = "invalid bpf_ld_imm64 insn", + .errstr = "last insn is not an exit or jmp", .result = REJECT, }, {
Commit 4976b718c355 ("bpf: Introduce pseudo_btf_id") switched the order of check_subprogs() and resolve_pseudo_ldimm() in the verifier. Now an empty prog and the prog of a single invalid ldimm expect to see the error "last insn is not an exit or jmp" instead, because the check for subprogs comes first. Fix the expection of the error message. Tested: # ./test_verifier Summary: 1130 PASSED, 538 SKIPPED, 0 FAILED and the full set of bpf selftests. Fixes: 4976b718c355 ("bpf: Introduce pseudo_btf_id") Signed-off-by: Hao Luo <haoluo@google.com> --- tools/testing/selftests/bpf/verifier/basic.c | 2 +- tools/testing/selftests/bpf/verifier/ld_imm64.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)