diff options
author | Jiong Wang <jiong.wang@netronome.com> | 2019-01-26 12:26:01 -0500 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2019-01-26 13:33:01 -0800 |
commit | 092ed0968bb648cd18e8a0430cd0a8a71727315c (patch) | |
tree | 86acdf22e4245eac4b56c622b980e10a1d899c7d /kernel/bpf/core.c | |
parent | bpf: refactor verifier min/max code for condition jump (diff) | |
download | linux-dev-092ed0968bb648cd18e8a0430cd0a8a71727315c.tar.xz linux-dev-092ed0968bb648cd18e8a0430cd0a8a71727315c.zip |
bpf: verifier support JMP32
This patch teach verifier about the new BPF_JMP32 instruction class.
Verifier need to treat it similar as the existing BPF_JMP class.
A BPF_JMP32 insn needs to go through all checks that have been done on
BPF_JMP.
Also, verifier is doing runtime optimizations based on the extra info
conditional jump instruction could offer, especially when the comparison is
between constant and register that the value range of the register could be
improved based on the comparison results. These code are updated
accordingly.
Acked-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'kernel/bpf/core.c')
-rw-r--r-- | kernel/bpf/core.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index 2a81b8af3748..1e443ba97310 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@ -362,7 +362,8 @@ static int bpf_adj_branches(struct bpf_prog *prog, u32 pos, s32 end_old, insn = prog->insnsi + end_old; } code = insn->code; - if (BPF_CLASS(code) != BPF_JMP || + if ((BPF_CLASS(code) != BPF_JMP && + BPF_CLASS(code) != BPF_JMP32) || BPF_OP(code) == BPF_EXIT) continue; /* Adjust offset of jmps if we cross patch boundaries. */ |