libbpf: Add probe for large INSN limit
Introduce a new probe which checks whether kernel has large maximum program size which was increased in the following commit:c04c0d2b96
("bpf: increase complexity limit and maximum program size") Based on the similar check in Cilium[0], authored by Daniel Borkmann. [0]657d0f585a
Co-authored-by: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: Michal Rostecki <mrostecki@opensuse.org> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com> Link: https://lore.kernel.org/bpf/20200108162428.25014-2-mrostecki@opensuse.org
This commit is contained in:
parent
1ece2fbe9b
commit
5ff0512003
|
@ -521,6 +521,7 @@ LIBBPF_API bool bpf_probe_prog_type(enum bpf_prog_type prog_type,
|
||||||
LIBBPF_API bool bpf_probe_map_type(enum bpf_map_type map_type, __u32 ifindex);
|
LIBBPF_API bool bpf_probe_map_type(enum bpf_map_type map_type, __u32 ifindex);
|
||||||
LIBBPF_API bool bpf_probe_helper(enum bpf_func_id id,
|
LIBBPF_API bool bpf_probe_helper(enum bpf_func_id id,
|
||||||
enum bpf_prog_type prog_type, __u32 ifindex);
|
enum bpf_prog_type prog_type, __u32 ifindex);
|
||||||
|
LIBBPF_API bool bpf_probe_large_insn_limit(__u32 ifindex);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get bpf_prog_info in continuous memory
|
* Get bpf_prog_info in continuous memory
|
||||||
|
|
|
@ -219,6 +219,7 @@ LIBBPF_0.0.7 {
|
||||||
bpf_object__detach_skeleton;
|
bpf_object__detach_skeleton;
|
||||||
bpf_object__load_skeleton;
|
bpf_object__load_skeleton;
|
||||||
bpf_object__open_skeleton;
|
bpf_object__open_skeleton;
|
||||||
|
bpf_probe_large_insn_limit;
|
||||||
bpf_prog_attach_xattr;
|
bpf_prog_attach_xattr;
|
||||||
bpf_program__attach;
|
bpf_program__attach;
|
||||||
bpf_program__name;
|
bpf_program__name;
|
||||||
|
|
|
@ -321,3 +321,24 @@ bool bpf_probe_helper(enum bpf_func_id id, enum bpf_prog_type prog_type,
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Probe for availability of kernel commit (5.3):
|
||||||
|
*
|
||||||
|
* c04c0d2b968a ("bpf: increase complexity limit and maximum program size")
|
||||||
|
*/
|
||||||
|
bool bpf_probe_large_insn_limit(__u32 ifindex)
|
||||||
|
{
|
||||||
|
struct bpf_insn insns[BPF_MAXINSNS + 1];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < BPF_MAXINSNS; i++)
|
||||||
|
insns[i] = BPF_MOV64_IMM(BPF_REG_0, 1);
|
||||||
|
insns[BPF_MAXINSNS] = BPF_EXIT_INSN();
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
probe_load(BPF_PROG_TYPE_SCHED_CLS, insns, ARRAY_SIZE(insns), NULL, 0,
|
||||||
|
ifindex);
|
||||||
|
|
||||||
|
return errno != E2BIG && errno != EINVAL;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue