public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH bpf-next v2 0/2] Add prog_kfunc feature probe
@ 2025-01-23 16:55 Tao Chen
  0 siblings, 0 replies; 8+ messages in thread
From: Tao Chen @ 2025-01-23 16:55 UTC (permalink / raw)
  To: ast, daniel, andrii, eddyz87, haoluo, jolsa, qmo
  Cc: bpf, linux-kernel, Tao Chen

More and more kfunc functions are being added to the kernel.
Different prog types have different restrictions when using kfunc.
Therefore, prog_kfunc probe is added to check whether it is supported,
and the use of this api will be added to bpftool later.

Change list:
- v1 -> v2:
  - check unsupported prog type like probe_bpf_helper
  - add off parameter for module btf
  - chenk verifier info when kfunc id invalid

Revisions:
- v1
  https://lore.kernel.org/bpf/20250122171359.232791-1-chen.dylane@gmail.com

Tao Chen (2):
  libbpf: Add libbpf_probe_bpf_kfunc API
  selftests/bpf: Add libbpf_probe_bpf_kfunc API selftests

 tools/lib/bpf/libbpf.h                        | 17 ++++++-
 tools/lib/bpf/libbpf.map                      |  1 +
 tools/lib/bpf/libbpf_probes.c                 | 47 +++++++++++++++++++
 .../selftests/bpf/prog_tests/libbpf_probes.c  | 35 ++++++++++++++
 4 files changed, 99 insertions(+), 1 deletion(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH bpf-next v2 0/2] Add prog_kfunc feature probe
@ 2025-01-23 17:05 Tao Chen
  2025-01-23 17:05 ` [PATCH bpf-next v2 1/2] libbpf: Add libbpf_probe_bpf_kfunc API Tao Chen
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Tao Chen @ 2025-01-23 17:05 UTC (permalink / raw)
  To: ast, daniel, andrii, eddyz87, haoluo, jolsa, qmo
  Cc: bpf, linux-kernel, Tao Chen

More and more kfunc functions are being added to the kernel.
Different prog types have different restrictions when using kfunc.
Therefore, prog_kfunc probe is added to check whether it is supported,
and the use of this api will be added to bpftool later.

Change list:
- v1 -> v2:
  - check unsupported prog type like probe_bpf_helper
  - add off parameter for module btf
  - chenk verifier info when kfunc id invalid

Revisions:
- v1
  https://lore.kernel.org/bpf/20250122171359.232791-1-chen.dylane@gmail.com

Tao Chen (2):
  libbpf: Add libbpf_probe_bpf_kfunc API
  selftests/bpf: Add libbpf_probe_bpf_kfunc API selftests

 tools/lib/bpf/libbpf.h                        | 17 ++++++-
 tools/lib/bpf/libbpf.map                      |  1 +
 tools/lib/bpf/libbpf_probes.c                 | 47 +++++++++++++++++++
 .../selftests/bpf/prog_tests/libbpf_probes.c  | 35 ++++++++++++++
 4 files changed, 99 insertions(+), 1 deletion(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH bpf-next v2 1/2] libbpf: Add libbpf_probe_bpf_kfunc API
  2025-01-23 17:05 [PATCH bpf-next v2 0/2] Add prog_kfunc feature probe Tao Chen
@ 2025-01-23 17:05 ` Tao Chen
  2025-01-24  1:34   ` Eduard Zingerman
  2025-01-23 17:05 ` [PATCH bpf-next v2 2/2] selftests/bpf: Add libbpf_probe_bpf_kfunc API selftests Tao Chen
  2025-01-24  0:42 ` [PATCH bpf-next v2 0/2] Add prog_kfunc feature probe Eduard Zingerman
  2 siblings, 1 reply; 8+ messages in thread
From: Tao Chen @ 2025-01-23 17:05 UTC (permalink / raw)
  To: ast, daniel, andrii, eddyz87, haoluo, jolsa, qmo
  Cc: bpf, linux-kernel, Tao Chen

Similarly to libbpf_probe_bpf_helper, the libbpf_probe_bpf_kfunc
used to test the availability of the different eBPF kfuncs on the
current system.

Signed-off-by: Tao Chen <chen.dylane@gmail.com>
---
 tools/lib/bpf/libbpf.h        | 17 ++++++++++++-
 tools/lib/bpf/libbpf.map      |  1 +
 tools/lib/bpf/libbpf_probes.c | 47 +++++++++++++++++++++++++++++++++++
 3 files changed, 64 insertions(+), 1 deletion(-)

diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h
index 3020ee45303a..ac0b46d8d8f9 100644
--- a/tools/lib/bpf/libbpf.h
+++ b/tools/lib/bpf/libbpf.h
@@ -1680,7 +1680,22 @@ LIBBPF_API int libbpf_probe_bpf_map_type(enum bpf_map_type map_type, const void
  */
 LIBBPF_API int libbpf_probe_bpf_helper(enum bpf_prog_type prog_type,
 				       enum bpf_func_id helper_id, const void *opts);
-
+/**
+ * @brief **libbpf_probe_bpf_kfunc()** detects if host kernel supports the
+ * use of a given BPF kfunc from specified BPF program type.
+ * @param prog_type BPF program type used to check the support of BPF kfunc
+ * @param kfunc_id The btf ID of BPF kfunc to check support for
+ * @param off The module BTF FD, 0 for vmlinux
+ * @param opts reserved for future extensibility, should be NULL
+ * @return 1, if given combination of program type and kfunc is supported; 0,
+ * if the combination is not supported; negative error code if feature
+ * detection for provided input arguments failed or can't be performed
+ *
+ * Make sure the process has required set of CAP_* permissions (or runs as
+ * root) when performing feature checking.
+ */
+LIBBPF_API int libbpf_probe_bpf_kfunc(enum bpf_prog_type prog_type,
+				      int kfunc_id, __s16 off, const void *opts);
 /**
  * @brief **libbpf_num_possible_cpus()** is a helper function to get the
  * number of possible CPUs that the host kernel supports and expects.
diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map
index a8b2936a1646..e93fae101efd 100644
--- a/tools/lib/bpf/libbpf.map
+++ b/tools/lib/bpf/libbpf.map
@@ -436,4 +436,5 @@ LIBBPF_1.6.0 {
 		bpf_linker__add_buf;
 		bpf_linker__add_fd;
 		bpf_linker__new_fd;
+		libbpf_probe_bpf_kfunc;
 } LIBBPF_1.5.0;
diff --git a/tools/lib/bpf/libbpf_probes.c b/tools/lib/bpf/libbpf_probes.c
index 9dfbe7750f56..641b1b008eeb 100644
--- a/tools/lib/bpf/libbpf_probes.c
+++ b/tools/lib/bpf/libbpf_probes.c
@@ -413,6 +413,53 @@ int libbpf_probe_bpf_map_type(enum bpf_map_type map_type, const void *opts)
 	return libbpf_err(ret);
 }
 
+int libbpf_probe_bpf_kfunc(enum bpf_prog_type prog_type, int kfunc_id,
+			   __s16 off, const void *opts)
+{
+	struct bpf_insn insns[] = {
+		BPF_EXIT_INSN(),
+		BPF_EXIT_INSN(),
+	};
+	const size_t insn_cnt = ARRAY_SIZE(insns);
+	int err;
+	char buf[4096];
+
+	if (opts)
+		return libbpf_err(-EINVAL);
+
+	/* Same logic as probe_bpf_helper check */
+	switch (prog_type) {
+	case BPF_PROG_TYPE_TRACING:
+	case BPF_PROG_TYPE_EXT:
+	case BPF_PROG_TYPE_LSM:
+	case BPF_PROG_TYPE_STRUCT_OPS:
+		return -EOPNOTSUPP;
+	default:
+		break;
+	}
+
+	insns[0].code = BPF_JMP | BPF_CALL;
+	insns[0].src_reg = BPF_PSEUDO_KFUNC_CALL;
+	insns[0].imm = kfunc_id;
+	insns[0].off = off;
+
+	buf[0] = '\0';
+	err = probe_prog_load(prog_type, insns, insn_cnt, buf, sizeof(buf));
+	if (err < 0)
+		return libbpf_err(err);
+
+	/* If BPF verifier recognizes BPF kfunc but it's not supported for
+	 * given BPF program type, it will emit "calling kernel function
+	 * bpf_cpumask_create is not allowed", if the kfunc id is invalid,
+	 * it will emit "kernel btf_id 4294967295 is not a function"
+	 */
+	if (err == 0 && (strstr(buf, "not allowed") || strstr(buf, "not a function")))
+		return 0;
+
+	return 1; /* assume supported */
+}
+
 int libbpf_probe_bpf_helper(enum bpf_prog_type prog_type, enum bpf_func_id helper_id,
 			    const void *opts)
 {
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH bpf-next v2 2/2] selftests/bpf: Add libbpf_probe_bpf_kfunc API selftests
  2025-01-23 17:05 [PATCH bpf-next v2 0/2] Add prog_kfunc feature probe Tao Chen
  2025-01-23 17:05 ` [PATCH bpf-next v2 1/2] libbpf: Add libbpf_probe_bpf_kfunc API Tao Chen
@ 2025-01-23 17:05 ` Tao Chen
  2025-01-24  0:42 ` [PATCH bpf-next v2 0/2] Add prog_kfunc feature probe Eduard Zingerman
  2 siblings, 0 replies; 8+ messages in thread
From: Tao Chen @ 2025-01-23 17:05 UTC (permalink / raw)
  To: ast, daniel, andrii, eddyz87, haoluo, jolsa, qmo
  Cc: bpf, linux-kernel, Tao Chen

Add selftests for prog_kfunc feature probing.
 ./test_progs -t libbpf_probe_kfuncs
 #153     libbpf_probe_kfuncs:OK
 Summary: 1/0 PASSED, 0 SKIPPED, 0 FAILED

Signed-off-by: Tao Chen <chen.dylane@gmail.com>
---
 .../selftests/bpf/prog_tests/libbpf_probes.c  | 35 +++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/tools/testing/selftests/bpf/prog_tests/libbpf_probes.c b/tools/testing/selftests/bpf/prog_tests/libbpf_probes.c
index 4ed46ed58a7b..d9d69941f694 100644
--- a/tools/testing/selftests/bpf/prog_tests/libbpf_probes.c
+++ b/tools/testing/selftests/bpf/prog_tests/libbpf_probes.c
@@ -126,3 +126,38 @@ void test_libbpf_probe_helpers(void)
 		ASSERT_EQ(res, d->supported, buf);
 	}
 }
+
+void test_libbpf_probe_kfuncs(void)
+{
+	int ret, kfunc_id;
+	char *kfunc = "bpf_cpumask_create";
+	struct btf *btf;
+
+	btf = btf__parse("/sys/kernel/btf/vmlinux", NULL);
+	if (!ASSERT_OK_PTR(btf, "btf_parse"))
+		return;
+
+	kfunc_id = btf__find_by_name_kind(btf, kfunc, BTF_KIND_FUNC);
+	if (!ASSERT_GT(kfunc_id, 0, kfunc))
+		goto cleanup;
+
+	/* prog BPF_PROG_TYPE_SYSCALL supports kfunc bpf_cpumask_create */
+	ret = libbpf_probe_bpf_kfunc(BPF_PROG_TYPE_SYSCALL, kfunc_id, 0, NULL);
+	ASSERT_EQ(ret, 1, kfunc);
+
+	/* prog BPF_PROG_TYPE_KPROBE does not support kfunc bpf_cpumask_create */
+	ret = libbpf_probe_bpf_kfunc(BPF_PROG_TYPE_KPROBE, kfunc_id, 0, NULL);
+	ASSERT_EQ(ret, 0, kfunc);
+
+	/* invalid kfunc id */
+	ret = libbpf_probe_bpf_kfunc(BPF_PROG_TYPE_KPROBE, -1, 0, NULL);
+	ASSERT_EQ(ret, 0, "invalid kfunc id:-1");
+
+	/* invalid prog type */
+	ret = libbpf_probe_bpf_kfunc(100000, kfunc_id, 0, NULL);
+	if (!ASSERT_LE(ret, 0, "invalid prog type:100000"))
+		goto cleanup;
+
+cleanup:
+	btf__free(btf);
+}
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH bpf-next v2 0/2] Add prog_kfunc feature probe
  2025-01-23 17:05 [PATCH bpf-next v2 0/2] Add prog_kfunc feature probe Tao Chen
  2025-01-23 17:05 ` [PATCH bpf-next v2 1/2] libbpf: Add libbpf_probe_bpf_kfunc API Tao Chen
  2025-01-23 17:05 ` [PATCH bpf-next v2 2/2] selftests/bpf: Add libbpf_probe_bpf_kfunc API selftests Tao Chen
@ 2025-01-24  0:42 ` Eduard Zingerman
  2025-01-24  2:49   ` Tao Chen
  2 siblings, 1 reply; 8+ messages in thread
From: Eduard Zingerman @ 2025-01-24  0:42 UTC (permalink / raw)
  To: Tao Chen, ast, daniel, andrii, haoluo, jolsa, qmo; +Cc: bpf, linux-kernel

On Fri, 2025-01-24 at 01:05 +0800, Tao Chen wrote:
> More and more kfunc functions are being added to the kernel.
> Different prog types have different restrictions when using kfunc.
> Therefore, prog_kfunc probe is added to check whether it is supported,
> and the use of this api will be added to bpftool later.
> 
> Change list:
> - v1 -> v2:
>   - check unsupported prog type like probe_bpf_helper
>   - add off parameter for module btf
>   - chenk verifier info when kfunc id invalid
> 
> Revisions:
> - v1
>   https://lore.kernel.org/bpf/20250122171359.232791-1-chen.dylane@gmail.com
> 
> Tao Chen (2):
>   libbpf: Add libbpf_probe_bpf_kfunc API
>   selftests/bpf: Add libbpf_probe_bpf_kfunc API selftests
> 
>  tools/lib/bpf/libbpf.h                        | 17 ++++++-
>  tools/lib/bpf/libbpf.map                      |  1 +
>  tools/lib/bpf/libbpf_probes.c                 | 47 +++++++++++++++++++
>  .../selftests/bpf/prog_tests/libbpf_probes.c  | 35 ++++++++++++++
>  4 files changed, 99 insertions(+), 1 deletion(-)
> 

Hi Tao,

Looks like something is wrong with the way the patch was generated:
- patchwork link:
  https://patchwork.kernel.org/project/netdevbpf/patch/20250123170555.291896-2-chen.dylane@gmail.com/
- error message:
  https://github.com/kernel-patches/bpf/pull/8395

    Cmd('git') failed due to: exit code(128)
      cmdline: git am --3way
      stdout: 'Applying: libbpf: Add libbpf_probe_bpf_kfunc API
    Patch failed at 0001 libbpf: Add libbpf_probe_bpf_kfunc API
    When you have resolved this problem, run "git am --continue".
    If you prefer to skip this patch, run "git am --skip" instead.
    To restore the original branch and stop patching, run "git am --abort".'
      stderr: 'error: corrupt patch at line 103
    error: could not build fake ancestor
    hint: Use 'git am --show-current-patch=diff' to see the failed patch'

I get the same error when trying to apply locally,
could you please double check?

Thanks,
Eduard


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH bpf-next v2 1/2] libbpf: Add libbpf_probe_bpf_kfunc API
  2025-01-23 17:05 ` [PATCH bpf-next v2 1/2] libbpf: Add libbpf_probe_bpf_kfunc API Tao Chen
@ 2025-01-24  1:34   ` Eduard Zingerman
  2025-01-24  3:25     ` Tao Chen
  0 siblings, 1 reply; 8+ messages in thread
From: Eduard Zingerman @ 2025-01-24  1:34 UTC (permalink / raw)
  To: Tao Chen, ast, daniel, andrii, haoluo, jolsa, qmo; +Cc: bpf, linux-kernel

On Fri, 2025-01-24 at 01:05 +0800, Tao Chen wrote:

[...]

> +int libbpf_probe_bpf_kfunc(enum bpf_prog_type prog_type, int kfunc_id,
> +			   __s16 off, const void *opts)
                                 ^^^
Nit:                      maybe name this btf_fd?

> +{

In v2 function looks identical to libbpf_probe_bpf_helper,
do we want to copy-paste it or introduce a utility:

  static int probe_insn(enum bpf_prog_type prog_type, struct bpf_insn insn,
                        const char **accepted_msgs)

And call it from both libbpf_probe_bpf_{helper,kfunc}?

> +	struct bpf_insn insns[] = {
> +		BPF_EXIT_INSN(),
> +		BPF_EXIT_INSN(),
> +	};
> +	const size_t insn_cnt = ARRAY_SIZE(insns);
> +	int err;
> +	char buf[4096];
> +
> +	if (opts)
> +		return libbpf_err(-EINVAL);
> +
> +	/* Same logic as probe_bpf_helper check */
> +	switch (prog_type) {
> +	case BPF_PROG_TYPE_TRACING:
> +	case BPF_PROG_TYPE_EXT:
> +	case BPF_PROG_TYPE_LSM:
> +	case BPF_PROG_TYPE_STRUCT_OPS:
> +		return -EOPNOTSUPP;
> +	default:
> +		break;
> +	}
> +
> +	insns[0].code = BPF_JMP | BPF_CALL;
> +	insns[0].src_reg = BPF_PSEUDO_KFUNC_CALL;
> +	insns[0].imm = kfunc_id;
> +	insns[0].off = off;
> +
> +	buf[0] = '\0';
> +	err = probe_prog_load(prog_type, insns, insn_cnt, buf, sizeof(buf));
> +	if (err < 0)
> +		return libbpf_err(err);
> +
> +	/* If BPF verifier recognizes BPF kfunc but it's not supported for
> +	 * given BPF program type, it will emit "calling kernel function
> +	 * bpf_cpumask_create is not allowed", if the kfunc id is invalid,
> +	 * it will emit "kernel btf_id 4294967295 is not a function"
> +	 */
> +	if (err == 0 && (strstr(buf, "not allowed") || strstr(buf, "not a function")))
> +		return 0;
> +
> +	return 1; /* assume supported */
> +}
> +
>  int libbpf_probe_bpf_helper(enum bpf_prog_type prog_type, enum bpf_func_id helper_id,
>  			    const void *opts)
>  {



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH bpf-next v2 0/2] Add prog_kfunc feature probe
  2025-01-24  0:42 ` [PATCH bpf-next v2 0/2] Add prog_kfunc feature probe Eduard Zingerman
@ 2025-01-24  2:49   ` Tao Chen
  0 siblings, 0 replies; 8+ messages in thread
From: Tao Chen @ 2025-01-24  2:49 UTC (permalink / raw)
  To: Eduard Zingerman, ast, daniel, andrii, haoluo, jolsa, qmo
  Cc: bpf, linux-kernel

在 2025/1/24 08:42, Eduard Zingerman 写道:
> On Fri, 2025-01-24 at 01:05 +0800, Tao Chen wrote:
>> More and more kfunc functions are being added to the kernel.
>> Different prog types have different restrictions when using kfunc.
>> Therefore, prog_kfunc probe is added to check whether it is supported,
>> and the use of this api will be added to bpftool later.
>>
>> Change list:
>> - v1 -> v2:
>>    - check unsupported prog type like probe_bpf_helper
>>    - add off parameter for module btf
>>    - chenk verifier info when kfunc id invalid
>>
>> Revisions:
>> - v1
>>    https://lore.kernel.org/bpf/20250122171359.232791-1-chen.dylane@gmail.com
>>
>> Tao Chen (2):
>>    libbpf: Add libbpf_probe_bpf_kfunc API
>>    selftests/bpf: Add libbpf_probe_bpf_kfunc API selftests
>>
>>   tools/lib/bpf/libbpf.h                        | 17 ++++++-
>>   tools/lib/bpf/libbpf.map                      |  1 +
>>   tools/lib/bpf/libbpf_probes.c                 | 47 +++++++++++++++++++
>>   .../selftests/bpf/prog_tests/libbpf_probes.c  | 35 ++++++++++++++
>>   4 files changed, 99 insertions(+), 1 deletion(-)
>>
> 
> Hi Tao,
> 
> Looks like something is wrong with the way the patch was generated:
> - patchwork link:
>    https://patchwork.kernel.org/project/netdevbpf/patch/20250123170555.291896-2-chen.dylane@gmail.com/
> - error message:
>    https://github.com/kernel-patches/bpf/pull/8395
> 
>      Cmd('git') failed due to: exit code(128)
>        cmdline: git am --3way
>        stdout: 'Applying: libbpf: Add libbpf_probe_bpf_kfunc API
>      Patch failed at 0001 libbpf: Add libbpf_probe_bpf_kfunc API
>      When you have resolved this problem, run "git am --continue".
>      If you prefer to skip this patch, run "git am --skip" instead.
>      To restore the original branch and stop patching, run "git am --abort".'
>        stderr: 'error: corrupt patch at line 103
>      error: could not build fake ancestor
>      hint: Use 'git am --show-current-patch=diff' to see the failed patch'
> 
> I get the same error when trying to apply locally,
> could you please double check?
> 
> Thanks,
> Eduard
> 

Hi, Eduard, thank you for your reply, i tried it out, and it turns out 
it's really my problem. I will resend it in v3.

-- 
Best Regards
Dylane Chen

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH bpf-next v2 1/2] libbpf: Add libbpf_probe_bpf_kfunc API
  2025-01-24  1:34   ` Eduard Zingerman
@ 2025-01-24  3:25     ` Tao Chen
  0 siblings, 0 replies; 8+ messages in thread
From: Tao Chen @ 2025-01-24  3:25 UTC (permalink / raw)
  To: Eduard Zingerman, ast, daniel, andrii, haoluo, jolsa, qmo
  Cc: bpf, linux-kernel

在 2025/1/24 09:34, Eduard Zingerman 写道:
> On Fri, 2025-01-24 at 01:05 +0800, Tao Chen wrote:
> 
> [...]
> 
>> +int libbpf_probe_bpf_kfunc(enum bpf_prog_type prog_type, int kfunc_id,
>> +			   __s16 off, const void *opts)
>                                   ^^^
> Nit:                      maybe name this btf_fd?

Hi Eduard, thank you for your guidance, ack, i will send it in v3.

> 
>> +{
> 
> In v2 function looks identical to libbpf_probe_bpf_helper,
> do we want to copy-paste it or introduce a utility:
> 
>    static int probe_insn(enum bpf_prog_type prog_type, struct bpf_insn insn,
>                          const char **accepted_msgs)
> 
> And call it from both libbpf_probe_bpf_{helper,kfunc}?

Yes, it seems much more concise. I will send it in v3. Thanks.

> 
>> +	struct bpf_insn insns[] = {
>> +		BPF_EXIT_INSN(),
>> +		BPF_EXIT_INSN(),
>> +	};
>> +	const size_t insn_cnt = ARRAY_SIZE(insns);
>> +	int err;
>> +	char buf[4096];
>> +
>> +	if (opts)
>> +		return libbpf_err(-EINVAL);
>> +
>> +	/* Same logic as probe_bpf_helper check */
>> +	switch (prog_type) {
>> +	case BPF_PROG_TYPE_TRACING:
>> +	case BPF_PROG_TYPE_EXT:
>> +	case BPF_PROG_TYPE_LSM:
>> +	case BPF_PROG_TYPE_STRUCT_OPS:
>> +		return -EOPNOTSUPP;
>> +	default:
>> +		break;
>> +	}
>> +
>> +	insns[0].code = BPF_JMP | BPF_CALL;
>> +	insns[0].src_reg = BPF_PSEUDO_KFUNC_CALL;
>> +	insns[0].imm = kfunc_id;
>> +	insns[0].off = off;
>> +
>> +	buf[0] = '\0';
>> +	err = probe_prog_load(prog_type, insns, insn_cnt, buf, sizeof(buf));
>> +	if (err < 0)
>> +		return libbpf_err(err);
>> +
>> +	/* If BPF verifier recognizes BPF kfunc but it's not supported for
>> +	 * given BPF program type, it will emit "calling kernel function
>> +	 * bpf_cpumask_create is not allowed", if the kfunc id is invalid,
>> +	 * it will emit "kernel btf_id 4294967295 is not a function"
>> +	 */
>> +	if (err == 0 && (strstr(buf, "not allowed") || strstr(buf, "not a function")))
>> +		return 0;
>> +
>> +	return 1; /* assume supported */
>> +}
>> +
>>   int libbpf_probe_bpf_helper(enum bpf_prog_type prog_type, enum bpf_func_id helper_id,
>>   			    const void *opts)
>>   {
> 
> 


-- 
Best Regards
Dylane Chen

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-01-24  3:25 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-23 17:05 [PATCH bpf-next v2 0/2] Add prog_kfunc feature probe Tao Chen
2025-01-23 17:05 ` [PATCH bpf-next v2 1/2] libbpf: Add libbpf_probe_bpf_kfunc API Tao Chen
2025-01-24  1:34   ` Eduard Zingerman
2025-01-24  3:25     ` Tao Chen
2025-01-23 17:05 ` [PATCH bpf-next v2 2/2] selftests/bpf: Add libbpf_probe_bpf_kfunc API selftests Tao Chen
2025-01-24  0:42 ` [PATCH bpf-next v2 0/2] Add prog_kfunc feature probe Eduard Zingerman
2025-01-24  2:49   ` Tao Chen
  -- strict thread matches above, loose matches on Subject: below --
2025-01-23 16:55 Tao Chen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox