* [PATCH bpf-next v2 1/2] libbpf: Allows disabling auto attach
@ 2022-08-16 23:40 Hao Luo
2022-08-16 23:40 ` [PATCH bpf-next v2 2/2] selftests/bpf: Tests libbpf autoattach APIs Hao Luo
2022-08-17 16:50 ` [PATCH bpf-next v2 1/2] libbpf: Allows disabling auto attach patchwork-bot+netdevbpf
0 siblings, 2 replies; 3+ messages in thread
From: Hao Luo @ 2022-08-16 23:40 UTC (permalink / raw)
To: linux-kernel, bpf
Cc: Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann,
Martin KaFai Lau, Song Liu, Yonghong Song, Jiri Olsa, KP Singh,
John Fastabend, Stanislav Fomichev, Yosry Ahmed, Hao Luo
Adds libbpf APIs for disabling auto-attach for individual functions.
This is motivated by the use case of cgroup iter [1]. Some iter
types require their parameters to be non-zero, therefore applying
auto-attach on them will fail. With these two new APIs, users who
want to use auto-attach and these types of iters can disable
auto-attach on the program and perform manual attach.
[1] https://lore.kernel.org/bpf/CAEf4BzZ+a2uDo_t6kGBziqdz--m2gh2_EUwkGLDtMd65uwxUjA@mail.gmail.com/
Signed-off-by: Hao Luo <haoluo@google.com>
---
tools/lib/bpf/libbpf.c | 15 ++++++++++++++-
tools/lib/bpf/libbpf.h | 2 ++
tools/lib/bpf/libbpf.map | 2 ++
3 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index aa05a99b913d..0159a43c7efd 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -417,6 +417,7 @@ struct bpf_program {
int fd;
bool autoload;
+ bool autoattach;
bool mark_btf_static;
enum bpf_prog_type type;
enum bpf_attach_type expected_attach_type;
@@ -755,6 +756,8 @@ bpf_object__init_prog(struct bpf_object *obj, struct bpf_program *prog,
prog->autoload = true;
}
+ prog->autoattach = true;
+
/* inherit object's log_level */
prog->log_level = obj->log_level;
@@ -8314,6 +8317,16 @@ int bpf_program__set_autoload(struct bpf_program *prog, bool autoload)
return 0;
}
+bool bpf_program__autoattach(const struct bpf_program *prog)
+{
+ return prog->autoattach;
+}
+
+void bpf_program__set_autoattach(struct bpf_program *prog, bool autoattach)
+{
+ prog->autoattach = autoattach;
+}
+
const struct bpf_insn *bpf_program__insns(const struct bpf_program *prog)
{
return prog->insns;
@@ -12346,7 +12359,7 @@ int bpf_object__attach_skeleton(struct bpf_object_skeleton *s)
struct bpf_program *prog = *s->progs[i].prog;
struct bpf_link **link = s->progs[i].link;
- if (!prog->autoload)
+ if (!prog->autoload || !prog->autoattach)
continue;
/* auto-attaching not supported for this program */
diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h
index 61493c4cddac..88a1ac34b12a 100644
--- a/tools/lib/bpf/libbpf.h
+++ b/tools/lib/bpf/libbpf.h
@@ -260,6 +260,8 @@ LIBBPF_API const char *bpf_program__name(const struct bpf_program *prog);
LIBBPF_API const char *bpf_program__section_name(const struct bpf_program *prog);
LIBBPF_API bool bpf_program__autoload(const struct bpf_program *prog);
LIBBPF_API int bpf_program__set_autoload(struct bpf_program *prog, bool autoload);
+LIBBPF_API bool bpf_program__autoattach(const struct bpf_program *prog);
+LIBBPF_API void bpf_program__set_autoattach(struct bpf_program *prog, bool autoattach);
struct bpf_insn;
diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map
index 119e6e1ea7f1..2b928dc21af0 100644
--- a/tools/lib/bpf/libbpf.map
+++ b/tools/lib/bpf/libbpf.map
@@ -358,6 +358,8 @@ LIBBPF_1.0.0 {
bpf_obj_get_opts;
bpf_prog_query_opts;
bpf_program__attach_ksyscall;
+ bpf_program__autoattach;
+ bpf_program__set_autoattach;
btf__add_enum64;
btf__add_enum64_value;
libbpf_bpf_attach_type_str;
--
2.37.1.595.g718a3a8f04-goog
^ permalink raw reply related [flat|nested] 3+ messages in thread* [PATCH bpf-next v2 2/2] selftests/bpf: Tests libbpf autoattach APIs
2022-08-16 23:40 [PATCH bpf-next v2 1/2] libbpf: Allows disabling auto attach Hao Luo
@ 2022-08-16 23:40 ` Hao Luo
2022-08-17 16:50 ` [PATCH bpf-next v2 1/2] libbpf: Allows disabling auto attach patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: Hao Luo @ 2022-08-16 23:40 UTC (permalink / raw)
To: linux-kernel, bpf
Cc: Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann,
Martin KaFai Lau, Song Liu, Yonghong Song, Jiri Olsa, KP Singh,
John Fastabend, Stanislav Fomichev, Yosry Ahmed, Hao Luo
Adds test for libbpf APIs that toggle bpf program auto-attaching.
Signed-off-by: Hao Luo <haoluo@google.com>
---
.../selftests/bpf/prog_tests/autoattach.c | 30 +++++++++++++++++++
.../selftests/bpf/progs/test_autoattach.c | 23 ++++++++++++++
2 files changed, 53 insertions(+)
create mode 100644 tools/testing/selftests/bpf/prog_tests/autoattach.c
create mode 100644 tools/testing/selftests/bpf/progs/test_autoattach.c
diff --git a/tools/testing/selftests/bpf/prog_tests/autoattach.c b/tools/testing/selftests/bpf/prog_tests/autoattach.c
new file mode 100644
index 000000000000..b34b5945d297
--- /dev/null
+++ b/tools/testing/selftests/bpf/prog_tests/autoattach.c
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2022 Google */
+
+#include <test_progs.h>
+#include "test_autoattach.skel.h"
+
+void test_autoattach(void)
+{
+ struct test_autoattach* skel;
+
+ skel = test_autoattach__open_and_load();
+ if (!ASSERT_OK_PTR(skel, "skel_open_and_load"))
+ goto cleanup;
+
+ /* disable auto-attach for prog2 */
+ bpf_program__set_autoattach(skel->progs.prog2, false);
+ ASSERT_TRUE(bpf_program__autoattach(skel->progs.prog1), "autoattach_prog1");
+ ASSERT_FALSE(bpf_program__autoattach(skel->progs.prog2), "autoattach_prog2");
+ if (!ASSERT_OK(test_autoattach__attach(skel), "skel_attach"))
+ goto cleanup;
+
+ usleep(1);
+
+ ASSERT_TRUE(skel->bss->prog1_called, "attached_prog1");
+ ASSERT_FALSE(skel->bss->prog2_called, "attached_prog2");
+
+cleanup:
+ test_autoattach__destroy(skel);
+}
+
diff --git a/tools/testing/selftests/bpf/progs/test_autoattach.c b/tools/testing/selftests/bpf/progs/test_autoattach.c
new file mode 100644
index 000000000000..11a44493ebce
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/test_autoattach.c
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2022 Google */
+
+#include "vmlinux.h"
+#include <bpf/bpf_tracing.h>
+
+bool prog1_called = false;
+bool prog2_called = false;
+
+SEC("raw_tp/sys_enter")
+int prog1(const void *ctx)
+{
+ prog1_called = true;
+ return 0;
+}
+
+SEC("raw_tp/sys_exit")
+int prog2(const void *ctx)
+{
+ prog2_called = true;
+ return 0;
+}
+
--
2.37.1.595.g718a3a8f04-goog
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH bpf-next v2 1/2] libbpf: Allows disabling auto attach
2022-08-16 23:40 [PATCH bpf-next v2 1/2] libbpf: Allows disabling auto attach Hao Luo
2022-08-16 23:40 ` [PATCH bpf-next v2 2/2] selftests/bpf: Tests libbpf autoattach APIs Hao Luo
@ 2022-08-17 16:50 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-08-17 16:50 UTC (permalink / raw)
To: Hao Luo
Cc: linux-kernel, bpf, ast, andrii, daniel, martin.lau, song, yhs,
jolsa, kpsingh, john.fastabend, sdf, yosryahmed
Hello:
This series was applied to bpf/bpf-next.git (master)
by Andrii Nakryiko <andrii@kernel.org>:
On Tue, 16 Aug 2022 16:40:11 -0700 you wrote:
> Adds libbpf APIs for disabling auto-attach for individual functions.
> This is motivated by the use case of cgroup iter [1]. Some iter
> types require their parameters to be non-zero, therefore applying
> auto-attach on them will fail. With these two new APIs, users who
> want to use auto-attach and these types of iters can disable
> auto-attach on the program and perform manual attach.
>
> [...]
Here is the summary with links:
- [bpf-next,v2,1/2] libbpf: Allows disabling auto attach
https://git.kernel.org/bpf/bpf-next/c/43cb8cbadffa
- [bpf-next,v2,2/2] selftests/bpf: Tests libbpf autoattach APIs
https://git.kernel.org/bpf/bpf-next/c/738a2f2f9130
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-08-17 16:50 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-16 23:40 [PATCH bpf-next v2 1/2] libbpf: Allows disabling auto attach Hao Luo
2022-08-16 23:40 ` [PATCH bpf-next v2 2/2] selftests/bpf: Tests libbpf autoattach APIs Hao Luo
2022-08-17 16:50 ` [PATCH bpf-next v2 1/2] libbpf: Allows disabling auto attach patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox