Re: [PATCH bpf-next 3/4] bpf: fix control-flow graph checking in privileged mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Nov 8, 2023 at 3:12 PM Andrii Nakryiko <andrii@xxxxxxxxxx> wrote:
>
>
> @@ -15622,11 +15619,11 @@ static int visit_insn(int t, struct bpf_verifier_env *env)
>                 /* conditional jump with two edges */
>                 mark_prune_point(env, t);
>
> -               ret = push_insn(t, t + 1, FALLTHROUGH, env, true);
> +               ret = push_insn(t, t + 1, FALLTHROUGH | CONDITIONAL, env);
>                 if (ret)
>                         return ret;
>
> -               return push_insn(t, t + insn->off + 1, BRANCH, env, true);
> +               return push_insn(t, t + insn->off + 1, BRANCH | CONDITIONAL, env);

If I'm reading this correctly, after the first conditional jmp
both fallthrough and branch become sticky with the CONDITIONAL flag.
So all processing after first 'if a == b' insn is running
with loop_ok==true.
If so, all this complexity is not worth it. Let's just remove 'loop_ok' flag.

Also
if (ret) return ret;
in the above looks like an existing bug.
It probably should be if (ret < 0) return ret;
Otherwise it's probably possible to craft a prog where fallthrough
is explored and in such case the branch target will be ignored.
Not a safety issue, since the verifier will walk that path anyway,
but a bug in check_cfg nevertheless.





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux