diff options
author | Jakub Kicinski | 2017-12-15 06:29:17 +0100 |
---|---|---|
committer | Daniel Borkmann | 2017-12-15 14:18:18 +0100 |
commit | 2cb230bdedb1b422507359ebc39d8f134300bf01 (patch) | |
tree | c4657960936925853118fa7da7f8fc9aa188827e /drivers/net/ethernet/netronome/nfp/bpf/verifier.c | |
parent | nfp: bpf: prepare for parsing BPF FW capabilities (diff) | |
download | kernel-qcow2-linux-2cb230bdedb1b422507359ebc39d8f134300bf01.tar.gz kernel-qcow2-linux-2cb230bdedb1b422507359ebc39d8f134300bf01.tar.xz kernel-qcow2-linux-2cb230bdedb1b422507359ebc39d8f134300bf01.zip |
nfp: bpf: prepare for call support
Add skeleton of verifier checks and translation handler
for call instructions. Make sure jump target resolution
will not treat them as jumps.
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'drivers/net/ethernet/netronome/nfp/bpf/verifier.c')
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/bpf/verifier.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/bpf/verifier.c b/drivers/net/ethernet/netronome/nfp/bpf/verifier.c index d2bf29c90226..3b940b682ac3 100644 --- a/drivers/net/ethernet/netronome/nfp/bpf/verifier.c +++ b/drivers/net/ethernet/netronome/nfp/bpf/verifier.c @@ -69,6 +69,20 @@ nfp_bpf_goto_meta(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, } static int +nfp_bpf_check_call(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta) +{ + u32 func_id = meta->insn.imm; + + switch (func_id) { + default: + pr_warn("unsupported function id: %d\n", func_id); + return -EOPNOTSUPP; + } + + return 0; +} + +static int nfp_bpf_check_exit(struct nfp_prog *nfp_prog, struct bpf_verifier_env *env) { @@ -177,6 +191,8 @@ nfp_verify_insn(struct bpf_verifier_env *env, int insn_idx, int prev_insn_idx) return -EINVAL; } + if (meta->insn.code == (BPF_JMP | BPF_CALL)) + return nfp_bpf_check_call(nfp_prog, meta); if (meta->insn.code == (BPF_JMP | BPF_EXIT)) return nfp_bpf_check_exit(nfp_prog, env); |