* [PATCH bpf-next v3 1/2] libbpf: Add probe for large INSN limit
2020-01-08 16:23 [PATCH bpf-next v3 0/2] bpftool/libbpf: Add probe for large INSN limit Michal Rostecki
@ 2020-01-08 16:23 ` Michal Rostecki
2020-01-08 16:23 ` [PATCH bpf-next v3 2/2] bpftool: Add misc section and " Michal Rostecki
2020-01-08 17:48 ` [PATCH bpf-next v3 0/2] bpftool/libbpf: Add " Quentin Monnet
2 siblings, 0 replies; 5+ messages in thread
From: Michal Rostecki @ 2020-01-08 16:23 UTC (permalink / raw)
To: bpf
Cc: Alexei Starovoitov, Daniel Borkmann, Martin KaFai Lau, Song Liu,
Yonghong Song, Andrii Nakryiko, Quentin Monnet,
Stanislav Fomichev, Jakub Kicinski, Peter Wu, Prashant Bhole,
netdev, linux-kernel
Introduce a new probe which checks whether kernel has large maximum
program size (1M) which was increased in the following commit:
c04c0d2b968a ("bpf: increase complexity limit and maximum program size")
Based on the similar check in Cilium[0], authored by Daniel Borkmann.
[0] https://github.com/cilium/cilium/commit/657d0f585afd26232cfa5d4e70b6f64d2ea91596
Co-authored-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Michal Rostecki <mrostecki@opensuse.org>
---
tools/lib/bpf/libbpf.h | 1 +
tools/lib/bpf/libbpf.map | 1 +
tools/lib/bpf/libbpf_probes.c | 21 +++++++++++++++++++++
3 files changed, 23 insertions(+)
diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h
index fe592ef48f1b..26bf539f1b3c 100644
--- a/tools/lib/bpf/libbpf.h
+++ b/tools/lib/bpf/libbpf.h
@@ -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_helper(enum bpf_func_id id,
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
diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map
index e9713a574243..b300d74c921a 100644
--- a/tools/lib/bpf/libbpf.map
+++ b/tools/lib/bpf/libbpf.map
@@ -219,6 +219,7 @@ LIBBPF_0.0.7 {
bpf_object__detach_skeleton;
bpf_object__load_skeleton;
bpf_object__open_skeleton;
+ bpf_probe_large_insn_limit;
bpf_prog_attach_xattr;
bpf_program__attach;
bpf_program__name;
diff --git a/tools/lib/bpf/libbpf_probes.c b/tools/lib/bpf/libbpf_probes.c
index a9eb8b322671..221e6ad97012 100644
--- a/tools/lib/bpf/libbpf_probes.c
+++ b/tools/lib/bpf/libbpf_probes.c
@@ -321,3 +321,24 @@ bool bpf_probe_helper(enum bpf_func_id id, enum bpf_prog_type prog_type,
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;
+}
--
2.16.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH bpf-next v3 2/2] bpftool: Add misc section and probe for large INSN limit
2020-01-08 16:23 [PATCH bpf-next v3 0/2] bpftool/libbpf: Add probe for large INSN limit Michal Rostecki
2020-01-08 16:23 ` [PATCH bpf-next v3 1/2] libbpf: " Michal Rostecki
@ 2020-01-08 16:23 ` Michal Rostecki
2020-01-08 17:48 ` [PATCH bpf-next v3 0/2] bpftool/libbpf: Add " Quentin Monnet
2 siblings, 0 replies; 5+ messages in thread
From: Michal Rostecki @ 2020-01-08 16:23 UTC (permalink / raw)
To: bpf
Cc: Alexei Starovoitov, Daniel Borkmann, Martin KaFai Lau, Song Liu,
Yonghong Song, Andrii Nakryiko, Quentin Monnet,
Stanislav Fomichev, Jakub Kicinski, Prashant Bhole, Peter Wu,
netdev, linux-kernel
Introduce a new probe section (misc) for probes not related to concrete
map types, program types, functions or kernel configuration. Introduce a
probe for large INSN limit as the first one in that section.
Signed-off-by: Michal Rostecki <mrostecki@opensuse.org>
---
tools/bpf/bpftool/feature.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/tools/bpf/bpftool/feature.c b/tools/bpf/bpftool/feature.c
index 03bdc5b3ac49..94735d968c34 100644
--- a/tools/bpf/bpftool/feature.c
+++ b/tools/bpf/bpftool/feature.c
@@ -572,6 +572,18 @@ probe_helpers_for_progtype(enum bpf_prog_type prog_type, bool supported_type,
printf("\n");
}
+static void
+probe_large_insn_limit(const char *define_prefix, __u32 ifindex)
+{
+ bool res;
+
+ res = bpf_probe_large_insn_limit(ifindex);
+ print_bool_feature("have_large_insn_limit",
+ "Large program size limit",
+ "HAVE_LARGE_INSN_LIMIT",
+ res, define_prefix);
+}
+
static int do_probe(int argc, char **argv)
{
enum probe_component target = COMPONENT_UNSPEC;
@@ -724,6 +736,12 @@ static int do_probe(int argc, char **argv)
probe_helpers_for_progtype(i, supported_types[i],
define_prefix, ifindex);
+ print_end_then_start_section("misc",
+ "Scanning miscellaneous eBPF features...",
+ "/*** eBPF misc features ***/",
+ define_prefix);
+ probe_large_insn_limit(define_prefix, ifindex);
+
exit_close_json:
if (json_output) {
/* End current "section" of probes */
--
2.16.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH bpf-next v3 0/2] bpftool/libbpf: Add probe for large INSN limit
2020-01-08 16:23 [PATCH bpf-next v3 0/2] bpftool/libbpf: Add probe for large INSN limit Michal Rostecki
2020-01-08 16:23 ` [PATCH bpf-next v3 1/2] libbpf: " Michal Rostecki
2020-01-08 16:23 ` [PATCH bpf-next v3 2/2] bpftool: Add misc section and " Michal Rostecki
@ 2020-01-08 17:48 ` Quentin Monnet
2020-01-08 18:37 ` Daniel Borkmann
2 siblings, 1 reply; 5+ messages in thread
From: Quentin Monnet @ 2020-01-08 17:48 UTC (permalink / raw)
To: Michal Rostecki, bpf
Cc: Alexei Starovoitov, Daniel Borkmann, Martin KaFai Lau, Song Liu,
Yonghong Song, Andrii Nakryiko, Jakub Kicinski,
Stanislav Fomichev, Prashant Bhole, Peter Wu, netdev,
linux-kernel
2020-01-08 17:23 UTC+0100 ~ Michal Rostecki <mrostecki@opensuse.org>
> This series implements a new BPF feature probe which checks for the
> commit c04c0d2b968a ("bpf: increase complexity limit and maximum program
> size"), which increases the maximum program size to 1M. It's based on
> the similar check in Cilium, although Cilium is already aiming to use
> bpftool checks and eventually drop all its custom checks.
>
> Examples of outputs:
>
> # bpftool feature probe
> [...]
> Scanning miscellaneous eBPF features...
> Large complexity limit and maximum program size (1M) is available
>
> # bpftool feature probe macros
> [...]
> /*** eBPF misc features ***/
> #define HAVE_HAVE_LARGE_INSN_LIMIT
>
> # bpftool feature probe -j | jq '.["misc"]'
> {
> "have_large_insn_limit": true
> }
>
> v1 -> v2:
> - Test for 'BPF_MAXINSNS + 1' number of total insns.
> - Remove info about current 1M limit from probe's description.
>
> v2 -> v3:
> - Remove the "complexity" word from probe's description.
Series looks good to me, thanks!
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH bpf-next v3 0/2] bpftool/libbpf: Add probe for large INSN limit
2020-01-08 17:48 ` [PATCH bpf-next v3 0/2] bpftool/libbpf: Add " Quentin Monnet
@ 2020-01-08 18:37 ` Daniel Borkmann
0 siblings, 0 replies; 5+ messages in thread
From: Daniel Borkmann @ 2020-01-08 18:37 UTC (permalink / raw)
To: Quentin Monnet, Michal Rostecki, bpf
Cc: Alexei Starovoitov, Martin KaFai Lau, Song Liu, Yonghong Song,
Andrii Nakryiko, Jakub Kicinski, Stanislav Fomichev,
Prashant Bhole, Peter Wu, netdev, linux-kernel
On 1/8/20 6:48 PM, Quentin Monnet wrote:
> 2020-01-08 17:23 UTC+0100 ~ Michal Rostecki <mrostecki@opensuse.org>
>> This series implements a new BPF feature probe which checks for the
>> commit c04c0d2b968a ("bpf: increase complexity limit and maximum program
>> size"), which increases the maximum program size to 1M. It's based on
>> the similar check in Cilium, although Cilium is already aiming to use
>> bpftool checks and eventually drop all its custom checks.
>>
>> Examples of outputs:
>>
>> # bpftool feature probe
>> [...]
>> Scanning miscellaneous eBPF features...
>> Large complexity limit and maximum program size (1M) is available
>>
>> # bpftool feature probe macros
>> [...]
>> /*** eBPF misc features ***/
>> #define HAVE_HAVE_LARGE_INSN_LIMIT
>>
>> # bpftool feature probe -j | jq '.["misc"]'
>> {
>> "have_large_insn_limit": true
>> }
>>
>> v1 -> v2:
>> - Test for 'BPF_MAXINSNS + 1' number of total insns.
>> - Remove info about current 1M limit from probe's description.
>>
>> v2 -> v3:
>> - Remove the "complexity" word from probe's description.
>
> Series looks good to me, thanks!
>
> Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
Applied, thanks!
^ permalink raw reply [flat|nested] 5+ messages in thread