From: Luca Boccassi Date: Sun, 17 Jan 2021 22:54:27 +0000 (+0000) Subject: vrf: fix ip vrf exec with libbpf X-Git-Tag: v5.11.0~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8498ca92d7d734570f108b18d7d0858560c4ac07;p=thirdparty%2Fiproute2.git vrf: fix ip vrf exec with libbpf The size of bpf_insn is passed to bpf_load_program instead of the number of elements as it expects, so ip vrf exec fails with: $ sudo ip link add vrf-blue type vrf table 10 $ sudo ip link set dev vrf-blue up $ sudo ip/ip vrf exec vrf-blue ls Failed to load BPF prog: 'Invalid argument' last insn is not an exit or jmp processed 0 insns (limit 1000000) max_states_per_insn 0 total_states 0 peak_states 0 mark_read 0 Kernel compiled with CGROUP_BPF enabled? https://bugs.debian.org/980046 Reported-by: Emmanuel DECAEN Signed-off-by: Luca Boccassi Reviewed-by: David Ahern Signed-off-by: Stephen Hemminger --- diff --git a/lib/bpf_glue.c b/lib/bpf_glue.c index fa609bfee..d00a0dc17 100644 --- a/lib/bpf_glue.c +++ b/lib/bpf_glue.c @@ -14,7 +14,8 @@ int bpf_program_load(enum bpf_prog_type type, const struct bpf_insn *insns, size_t size_log) { #ifdef HAVE_LIBBPF - return bpf_load_program(type, insns, size_insns, license, 0, log, size_log); + return bpf_load_program(type, insns, size_insns / sizeof(struct bpf_insn), + license, 0, log, size_log); #else return bpf_prog_load_dev(type, insns, size_insns, license, 0, log, size_log); #endif