* [PATCH bpf-next v4 1/3] Add error returns to two API functions
@ 2022-04-20 16:12 grantseltzer
2022-04-20 16:12 ` [PATCH bpf-next v4 2/3] Update API functions usage to check error grantseltzer
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: grantseltzer @ 2022-04-20 16:12 UTC (permalink / raw)
To: bpf; +Cc: andrii, grantseltzer, song
From: Grant Seltzer <grantseltzer@gmail.com>
This adds an error return to the following API functions:
- bpf_program__set_expected_attach_type()
- bpf_program__set_type()
In both cases, the error occurs when the BPF object has
already been loaded when the function is called. In this
case -EBUSY is returned.
Signed-off-by: Grant Seltzer <grantseltzer@gmail.com>
---
tools/lib/bpf/libbpf.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index bf4f7ac54ebf..707cb973b09c 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -8551,9 +8551,13 @@ enum bpf_prog_type bpf_program__type(const struct bpf_program *prog)
return prog->type;
}
-void bpf_program__set_type(struct bpf_program *prog, enum bpf_prog_type type)
+int bpf_program__set_type(struct bpf_program *prog, enum bpf_prog_type type)
{
+ if (prog->obj->loaded)
+ return libbpf_err(-EBUSY);
+
prog->type = type;
+ return 0;
}
static bool bpf_program__is_type(const struct bpf_program *prog,
@@ -8598,10 +8602,14 @@ enum bpf_attach_type bpf_program__expected_attach_type(const struct bpf_program
return prog->expected_attach_type;
}
-void bpf_program__set_expected_attach_type(struct bpf_program *prog,
+int bpf_program__set_expected_attach_type(struct bpf_program *prog,
enum bpf_attach_type type)
{
+ if (prog->obj->loaded)
+ return libbpf_err(-EBUSY);
+
prog->expected_attach_type = type;
+ return 0;
}
__u32 bpf_program__flags(const struct bpf_program *prog)
--
2.34.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH bpf-next v4 2/3] Update API functions usage to check error
2022-04-20 16:12 [PATCH bpf-next v4 1/3] Add error returns to two API functions grantseltzer
@ 2022-04-20 16:12 ` grantseltzer
2022-04-20 16:12 ` [PATCH bpf-next v4 3/3] Add documentation to API functions grantseltzer
2022-04-20 22:20 ` [PATCH bpf-next v4 1/3] Add error returns to two " patchwork-bot+netdevbpf
2 siblings, 0 replies; 5+ messages in thread
From: grantseltzer @ 2022-04-20 16:12 UTC (permalink / raw)
To: bpf; +Cc: andrii, grantseltzer, song
From: Grant Seltzer <grantseltzer@gmail.com>
This updates usage of the following API functions within
libbpf so their newly added error return is checked:
- bpf_program__set_expected_attach_type()
- bpf_program__set_type()
Signed-off-by: Grant Seltzer <grantseltzer@gmail.com>
---
tools/lib/bpf/libbpf.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 707cb973b09c..6487b1ccf7c3 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -7005,8 +7005,8 @@ static int bpf_object_init_progs(struct bpf_object *obj, const struct bpf_object
continue;
}
- bpf_program__set_type(prog, prog->sec_def->prog_type);
- bpf_program__set_expected_attach_type(prog, prog->sec_def->expected_attach_type);
+ prog->type = prog->sec_def->prog_type;
+ prog->expected_attach_type = prog->sec_def->expected_attach_type;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
@@ -8571,8 +8571,7 @@ int bpf_program__set_##NAME(struct bpf_program *prog) \
{ \
if (!prog) \
return libbpf_err(-EINVAL); \
- bpf_program__set_type(prog, TYPE); \
- return 0; \
+ return bpf_program__set_type(prog, TYPE); \
} \
\
bool bpf_program__is_##NAME(const struct bpf_program *prog) \
@@ -9679,9 +9678,8 @@ static int bpf_prog_load_xattr2(const struct bpf_prog_load_attr *attr,
* bpf_object__open guessed
*/
if (attr->prog_type != BPF_PROG_TYPE_UNSPEC) {
- bpf_program__set_type(prog, attr->prog_type);
- bpf_program__set_expected_attach_type(prog,
- attach_type);
+ prog->type = attr->prog_type;
+ prog->expected_attach_type = attach_type;
}
if (bpf_program__type(prog) == BPF_PROG_TYPE_UNSPEC) {
/*
--
2.34.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH bpf-next v4 3/3] Add documentation to API functions
2022-04-20 16:12 [PATCH bpf-next v4 1/3] Add error returns to two API functions grantseltzer
2022-04-20 16:12 ` [PATCH bpf-next v4 2/3] Update API functions usage to check error grantseltzer
@ 2022-04-20 16:12 ` grantseltzer
2022-04-20 22:16 ` Andrii Nakryiko
2022-04-20 22:20 ` [PATCH bpf-next v4 1/3] Add error returns to two " patchwork-bot+netdevbpf
2 siblings, 1 reply; 5+ messages in thread
From: grantseltzer @ 2022-04-20 16:12 UTC (permalink / raw)
To: bpf; +Cc: andrii, grantseltzer, song
From: Grant Seltzer <grantseltzer@gmail.com>
This adds documentation for the following API functions:
- bpf_program__set_expected_attach_type()
- bpf_program__set_type()
- bpf_program__set_attach_target()
- bpf_program__attach()
- bpf_program__pin()
- bpf_program__unpin()
Signed-off-by: Grant Seltzer <grantseltzer@gmail.com>
---
tools/lib/bpf/libbpf.h | 77 ++++++++++++++++++++++++++++++++++++++++--
1 file changed, 75 insertions(+), 2 deletions(-)
diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h
index 63d66f1adf1a..ddc33c78c70c 100644
--- a/tools/lib/bpf/libbpf.h
+++ b/tools/lib/bpf/libbpf.h
@@ -378,7 +378,31 @@ struct bpf_link;
LIBBPF_API struct bpf_link *bpf_link__open(const char *path);
LIBBPF_API int bpf_link__fd(const struct bpf_link *link);
LIBBPF_API const char *bpf_link__pin_path(const struct bpf_link *link);
+/**
+ * @brief **bpf_link__pin()** pins the BPF link to a file
+ * in the BPF FS specified by a path. This increments the links
+ * reference count, allowing it to stay loaded after the process
+ * which loaded it has exited.
+ *
+ * @param link BPF link to pin, must already be loaded
+ * @param path file path in a BPF file system
+ * @return 0, on success; negative error code, otherwise
+ */
+
LIBBPF_API int bpf_link__pin(struct bpf_link *link, const char *path);
+
+/**
+ * @brief **bpf_link__unpin()** unpins the BPF link from a file
+ * in the BPFFS specified by a path. This decrements the links
+ * reference count.
+ *
+ * The file pinning the BPF link can also be unlinked by a different
+ * process in which case this function will return an error.
+ *
+ * @param prog BPF program to unpin
+ * @param path file path to the pin in a BPF file system
+ * @return 0, on success; negative error code, otherwise
+ */
LIBBPF_API int bpf_link__unpin(struct bpf_link *link);
LIBBPF_API int bpf_link__update_program(struct bpf_link *link,
struct bpf_program *prog);
@@ -386,6 +410,22 @@ LIBBPF_API void bpf_link__disconnect(struct bpf_link *link);
LIBBPF_API int bpf_link__detach(struct bpf_link *link);
LIBBPF_API int bpf_link__destroy(struct bpf_link *link);
+/**
+ * @brief **bpf_program__attach()** is a generic function for attaching
+ * a BPF program based on auto-detection of program type, attach type,
+ * and extra paremeters, where applicable.
+ *
+ * @param prog BPF program to attach
+ * @return Reference to the newly created BPF link; or NULL is returned on error,
+ * error code is stored in errno
+ *
+ * This is supported for:
+ * - kprobe/kretprobe (depends on SEC() definition)
+ * - uprobe/uretprobe (depends on SEC() definition)
+ * - tracepoint
+ * - raw tracepoint
+ * - tracing programs (typed raw TP/fentry/fexit/fmod_ret)
+ */
LIBBPF_API struct bpf_link *
bpf_program__attach(const struct bpf_program *prog);
@@ -686,12 +726,37 @@ LIBBPF_DEPRECATED_SINCE(0, 8, "use bpf_program__set_type() instead")
LIBBPF_API int bpf_program__set_sk_lookup(struct bpf_program *prog);
LIBBPF_API enum bpf_prog_type bpf_program__type(const struct bpf_program *prog);
-LIBBPF_API void bpf_program__set_type(struct bpf_program *prog,
+
+/**
+ * @brief **bpf_program__set_type()** sets the program
+ * type of the passed BPF program.
+ * @param prog BPF program to set the program type for
+ * @param type program type to set the BPF map to have
+ * @return error code; or 0 if no error. An error occurs
+ * if the object is already loaded.
+ *
+ * This must be called before the BPF object is loaded,
+ * otherwise it has no effect and an error is returned.
+ */
+LIBBPF_API int bpf_program__set_type(struct bpf_program *prog,
enum bpf_prog_type type);
LIBBPF_API enum bpf_attach_type
bpf_program__expected_attach_type(const struct bpf_program *prog);
-LIBBPF_API void
+
+/**
+ * @brief **bpf_program__set_expected_attach_type()** sets the
+ * attach type of the passed BPF program. This is used for
+ * auto-detection of attachment when programs are loaded.
+ * @param prog BPF program to set the attach type for
+ * @param type attach type to set the BPF map to have
+ * @return error code; or 0 if no error. An error occurs
+ * if the object is already loaded.
+ *
+ * This must be called before the BPF object is loaded,
+ * otherwise it has no effect and an error is returned.
+ */
+LIBBPF_API int
bpf_program__set_expected_attach_type(struct bpf_program *prog,
enum bpf_attach_type type);
@@ -707,6 +772,14 @@ LIBBPF_API int bpf_program__set_log_level(struct bpf_program *prog, __u32 log_le
LIBBPF_API const char *bpf_program__log_buf(const struct bpf_program *prog, size_t *log_size);
LIBBPF_API int bpf_program__set_log_buf(struct bpf_program *prog, char *log_buf, size_t log_size);
+/**
+ * @brief **bpf_program__set_attach_target()** sets BTF-based attach target
+ * for supported BPF program types:
+ * BTF-aware raw tracepoints, fentry/fexit/fmod_ret, lsm, freplace
+ * @param prog BPF program to set the attach type for
+ * @param type attach type to set the BPF map to have
+ * @return error code; or 0 if no error occurred.
+ */
LIBBPF_API int
bpf_program__set_attach_target(struct bpf_program *prog, int attach_prog_fd,
const char *attach_func_name);
--
2.34.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH bpf-next v4 3/3] Add documentation to API functions
2022-04-20 16:12 ` [PATCH bpf-next v4 3/3] Add documentation to API functions grantseltzer
@ 2022-04-20 22:16 ` Andrii Nakryiko
0 siblings, 0 replies; 5+ messages in thread
From: Andrii Nakryiko @ 2022-04-20 22:16 UTC (permalink / raw)
To: grantseltzer; +Cc: bpf, Andrii Nakryiko, Song Liu
On Wed, Apr 20, 2022 at 9:12 AM grantseltzer <grantseltzer@gmail.com> wrote:
>
> From: Grant Seltzer <grantseltzer@gmail.com>
>
> This adds documentation for the following API functions:
> - bpf_program__set_expected_attach_type()
> - bpf_program__set_type()
> - bpf_program__set_attach_target()
> - bpf_program__attach()
> - bpf_program__pin()
> - bpf_program__unpin()
>
> Signed-off-by: Grant Seltzer <grantseltzer@gmail.com>
> ---
> tools/lib/bpf/libbpf.h | 77 ++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 75 insertions(+), 2 deletions(-)
>
[...]
>
> LIBBPF_API enum bpf_attach_type
> bpf_program__expected_attach_type(const struct bpf_program *prog);
> -LIBBPF_API void
> +
> +/**
> + * @brief **bpf_program__set_expected_attach_type()** sets the
> + * attach type of the passed BPF program. This is used for
> + * auto-detection of attachment when programs are loaded.
> + * @param prog BPF program to set the attach type for
> + * @param type attach type to set the BPF map to have
> + * @return error code; or 0 if no error. An error occurs
> + * if the object is already loaded.
> + *
> + * This must be called before the BPF object is loaded,
> + * otherwise it has no effect and an error is returned.
> + */
> +LIBBPF_API int
you forgot to do this void -> int replacement in libbpf.h. I've fixed
it up while applying, so all the type changes happen in patch #1.
> bpf_program__set_expected_attach_type(struct bpf_program *prog,
> enum bpf_attach_type type);
>
> @@ -707,6 +772,14 @@ LIBBPF_API int bpf_program__set_log_level(struct bpf_program *prog, __u32 log_le
> LIBBPF_API const char *bpf_program__log_buf(const struct bpf_program *prog, size_t *log_size);
> LIBBPF_API int bpf_program__set_log_buf(struct bpf_program *prog, char *log_buf, size_t log_size);
>
> +/**
> + * @brief **bpf_program__set_attach_target()** sets BTF-based attach target
> + * for supported BPF program types:
> + * BTF-aware raw tracepoints, fentry/fexit/fmod_ret, lsm, freplace
also turned this into a proper list
> + * @param prog BPF program to set the attach type for
> + * @param type attach type to set the BPF map to have
> + * @return error code; or 0 if no error occurred.
> + */
> LIBBPF_API int
> bpf_program__set_attach_target(struct bpf_program *prog, int attach_prog_fd,
> const char *attach_func_name);
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH bpf-next v4 1/3] Add error returns to two API functions
2022-04-20 16:12 [PATCH bpf-next v4 1/3] Add error returns to two API functions grantseltzer
2022-04-20 16:12 ` [PATCH bpf-next v4 2/3] Update API functions usage to check error grantseltzer
2022-04-20 16:12 ` [PATCH bpf-next v4 3/3] Add documentation to API functions grantseltzer
@ 2022-04-20 22:20 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 5+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-04-20 22:20 UTC (permalink / raw)
To: grantseltzer; +Cc: bpf, andrii, song
Hello:
This series was applied to bpf/bpf-next.git (master)
by Andrii Nakryiko <andrii@kernel.org>:
On Wed, 20 Apr 2022 12:12:24 -0400 you wrote:
> From: Grant Seltzer <grantseltzer@gmail.com>
>
> This adds an error return to the following API functions:
>
> - bpf_program__set_expected_attach_type()
> - bpf_program__set_type()
>
> [...]
Here is the summary with links:
- [bpf-next,v4,1/3] Add error returns to two API functions
https://git.kernel.org/bpf/bpf-next/c/d9a51c964771
- [bpf-next,v4,2/3] Update API functions usage to check error
https://git.kernel.org/bpf/bpf-next/c/042b971bd9a3
- [bpf-next,v4,3/3] Add documentation to API functions
https://git.kernel.org/bpf/bpf-next/c/e1a34e19ea96
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] 5+ messages in thread
end of thread, other threads:[~2022-04-20 22:20 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-20 16:12 [PATCH bpf-next v4 1/3] Add error returns to two API functions grantseltzer
2022-04-20 16:12 ` [PATCH bpf-next v4 2/3] Update API functions usage to check error grantseltzer
2022-04-20 16:12 ` [PATCH bpf-next v4 3/3] Add documentation to API functions grantseltzer
2022-04-20 22:16 ` Andrii Nakryiko
2022-04-20 22:20 ` [PATCH bpf-next v4 1/3] Add error returns to two " patchwork-bot+netdevbpf
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.