diff mbox series

btf: warn but return no error for NULL btf from __register_btf_kfunc_id_set()

Message ID 20230626181120.7086-1-sj@kernel.org (mailing list archive)
State Superseded
Delegated to: BPF
Headers show
Series btf: warn but return no error for NULL btf from __register_btf_kfunc_id_set() | expand

Checks

Context Check Description
bpf/vmtest-bpf-next-VM_Test-1 success Logs for ShellCheck
bpf/vmtest-bpf-next-VM_Test-4 success Logs for build for x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-5 success Logs for build for x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-6 success Logs for set-matrix
bpf/vmtest-bpf-next-VM_Test-2 success Logs for build for aarch64 with gcc
bpf/vmtest-bpf-next-VM_Test-3 success Logs for build for s390x with gcc
netdev/series_format warning Single patches do not need cover letters; Target tree name not specified in the subject
netdev/tree_selection success Guessed tree name to be net-next
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 14 this patch: 14
netdev/cc_maintainers warning 9 maintainers not CCed: daniel@iogearbox.net yhs@fb.com kpsingh@kernel.org john.fastabend@gmail.com song@kernel.org sdf@google.com andrii@kernel.org jolsa@kernel.org haoluo@google.com
netdev/build_clang success Errors and warnings before: 8 this patch: 8
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success Fixes tag looks correct
netdev/build_allmodconfig_warn success Errors and warnings before: 14 this patch: 14
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 18 lines checked
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0
bpf/vmtest-bpf-next-VM_Test-7 success Logs for test_maps on aarch64 with gcc
bpf/vmtest-bpf-next-VM_Test-9 success Logs for test_maps on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-10 success Logs for test_maps on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-11 success Logs for test_progs on aarch64 with gcc
bpf/vmtest-bpf-next-VM_Test-13 success Logs for test_progs on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-14 success Logs for test_progs on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-15 success Logs for test_progs_no_alu32 on aarch64 with gcc
bpf/vmtest-bpf-next-VM_Test-17 success Logs for test_progs_no_alu32 on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-18 success Logs for test_progs_no_alu32 on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-19 success Logs for test_progs_no_alu32_parallel on aarch64 with gcc
bpf/vmtest-bpf-next-VM_Test-20 success Logs for test_progs_no_alu32_parallel on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-21 success Logs for test_progs_no_alu32_parallel on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-22 success Logs for test_progs_parallel on aarch64 with gcc
bpf/vmtest-bpf-next-VM_Test-23 success Logs for test_progs_parallel on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-24 success Logs for test_progs_parallel on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-25 success Logs for test_verifier on aarch64 with gcc
bpf/vmtest-bpf-next-VM_Test-27 success Logs for test_verifier on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-28 success Logs for test_verifier on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-29 success Logs for veristat
bpf/vmtest-bpf-next-VM_Test-26 success Logs for test_verifier on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-12 success Logs for test_progs on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-16 success Logs for test_progs_no_alu32 on s390x with gcc
bpf/vmtest-bpf-next-PR success PR summary
bpf/vmtest-bpf-next-VM_Test-8 success Logs for test_maps on s390x with gcc

Commit Message

SeongJae Park June 26, 2023, 6:11 p.m. UTC
__register_btf_kfunc_id_set() assumes .BTF to be part of the module's
.ko file if CONFIG_DEBUG_INFO_BTF is enabled.  If that's not the case,
the function prints an error message and return an error.  As a result,
such modules cannot be loaded.

However, the section could be stripped out during a build process.  It
would be better to let the modules loaded, because their basic
functionalities have no problem[1], though the BTF functionalities will
not be supported.  Make the function to lower the level of the message
from error to warn, and return no error.

[1] https://lore.kernel.org/bpf/20220219082037.ow2kbq5brktf4f2u@apollo.legion/

Reported-by: Alexander Egorenkov <Alexander.Egorenkov@ibm.com>
Link: https://lore.kernel.org/bpf/87y228q66f.fsf@oc8242746057.ibm.com/
Suggested-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Link: https://lore.kernel.org/bpf/20220219082037.ow2kbq5brktf4f2u@apollo.legion/
Fixes: dee872e124e8 ("bpf: Populate kfunc BTF ID sets in struct btf")
Cc: <stable@vger.kernel.org> # 5.17.x
Signed-off-by: SeongJae Park <sj@kernel.org>
---
 kernel/bpf/btf.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

Comments

Jiri Olsa June 27, 2023, 4:20 p.m. UTC | #1
On Mon, Jun 26, 2023 at 06:11:20PM +0000, SeongJae Park wrote:
> __register_btf_kfunc_id_set() assumes .BTF to be part of the module's
> .ko file if CONFIG_DEBUG_INFO_BTF is enabled.  If that's not the case,
> the function prints an error message and return an error.  As a result,
> such modules cannot be loaded.
> 
> However, the section could be stripped out during a build process.  It
> would be better to let the modules loaded, because their basic
> functionalities have no problem[1], though the BTF functionalities will
> not be supported.  Make the function to lower the level of the message
> from error to warn, and return no error.
> 
> [1] https://lore.kernel.org/bpf/20220219082037.ow2kbq5brktf4f2u@apollo.legion/
> 
> Reported-by: Alexander Egorenkov <Alexander.Egorenkov@ibm.com>
> Link: https://lore.kernel.org/bpf/87y228q66f.fsf@oc8242746057.ibm.com/
> Suggested-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
> Link: https://lore.kernel.org/bpf/20220219082037.ow2kbq5brktf4f2u@apollo.legion/
> Fixes: dee872e124e8 ("bpf: Populate kfunc BTF ID sets in struct btf")

should it be this one in Fixes instead?
  c446fdacb10d bpf: fix register_btf_kfunc_id_set for !CONFIG_DEBUG_INFO_BTF

other than that looks good

Acked-by: Jiri Olsa <jolsa@kernel.org>

jirka

> Cc: <stable@vger.kernel.org> # 5.17.x
> Signed-off-by: SeongJae Park <sj@kernel.org>
> ---
>  kernel/bpf/btf.c | 12 ++++--------
>  1 file changed, 4 insertions(+), 8 deletions(-)
> 
> diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c
> index 6b682b8e4b50..d683f034996f 100644
> --- a/kernel/bpf/btf.c
> +++ b/kernel/bpf/btf.c
> @@ -7848,14 +7848,10 @@ static int __register_btf_kfunc_id_set(enum btf_kfunc_hook hook,
>  
>  	btf = btf_get_module_btf(kset->owner);
>  	if (!btf) {
> -		if (!kset->owner && IS_ENABLED(CONFIG_DEBUG_INFO_BTF)) {
> -			pr_err("missing vmlinux BTF, cannot register kfuncs\n");
> -			return -ENOENT;
> -		}
> -		if (kset->owner && IS_ENABLED(CONFIG_DEBUG_INFO_BTF_MODULES)) {
> -			pr_err("missing module BTF, cannot register kfuncs\n");
> -			return -ENOENT;
> -		}
> +		if (!kset->owner && IS_ENABLED(CONFIG_DEBUG_INFO_BTF))
> +			pr_warn("missing vmlinux BTF, cannot register kfuncs\n");
> +		if (kset->owner && IS_ENABLED(CONFIG_DEBUG_INFO_BTF_MODULES))
> +			pr_warn("missing module BTF, cannot register kfuncs\n");
>  		return 0;
>  	}
>  	if (IS_ERR(btf))
> -- 
> 2.25.1
> 
>
SeongJae Park June 27, 2023, 4:37 p.m. UTC | #2
Hi Jiri,

On Tue, 27 Jun 2023 18:20:39 +0200 Jiri Olsa <olsajiri@gmail.com> wrote:

> On Mon, Jun 26, 2023 at 06:11:20PM +0000, SeongJae Park wrote:
> > __register_btf_kfunc_id_set() assumes .BTF to be part of the module's
> > .ko file if CONFIG_DEBUG_INFO_BTF is enabled.  If that's not the case,
> > the function prints an error message and return an error.  As a result,
> > such modules cannot be loaded.
> > 
> > However, the section could be stripped out during a build process.  It
> > would be better to let the modules loaded, because their basic
> > functionalities have no problem[1], though the BTF functionalities will
> > not be supported.  Make the function to lower the level of the message
> > from error to warn, and return no error.
> > 
> > [1] https://lore.kernel.org/bpf/20220219082037.ow2kbq5brktf4f2u@apollo.legion/
> > 
> > Reported-by: Alexander Egorenkov <Alexander.Egorenkov@ibm.com>
> > Link: https://lore.kernel.org/bpf/87y228q66f.fsf@oc8242746057.ibm.com/
> > Suggested-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
> > Link: https://lore.kernel.org/bpf/20220219082037.ow2kbq5brktf4f2u@apollo.legion/
> > Fixes: dee872e124e8 ("bpf: Populate kfunc BTF ID sets in struct btf")
> 
> should it be this one in Fixes instead?
>   c446fdacb10d bpf: fix register_btf_kfunc_id_set for !CONFIG_DEBUG_INFO_BTF

The commit c446fdacb10d was trying to fix commit dee872e124e8, which this patch
is claiming to fix, by relaxing the check.  Nevertheless, it seems the check
need to further relaxed, and therefore I wrote this patch.

For the reason, I was thinking this patch is directly fixing c446fdacb10d, but
is also fixing a problem originally introduced by dee872e124e8.   Nevertheless,
as the dee872e124e8 also has the Fixes tag, I think your suggestion makes
sense. 

I will fix so in the next spin.

> 
> other than that looks good
> 
> Acked-by: Jiri Olsa <jolsa@kernel.org>

Thank you, I will also add this to the next version of this patch :)


Thanks,
SJ

> 
> jirka
> 
> > Cc: <stable@vger.kernel.org> # 5.17.x
> > Signed-off-by: SeongJae Park <sj@kernel.org>
> > ---
> >  kernel/bpf/btf.c | 12 ++++--------
> >  1 file changed, 4 insertions(+), 8 deletions(-)
> > 
> > diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c
> > index 6b682b8e4b50..d683f034996f 100644
> > --- a/kernel/bpf/btf.c
> > +++ b/kernel/bpf/btf.c
> > @@ -7848,14 +7848,10 @@ static int __register_btf_kfunc_id_set(enum btf_kfunc_hook hook,
> >  
> >  	btf = btf_get_module_btf(kset->owner);
> >  	if (!btf) {
> > -		if (!kset->owner && IS_ENABLED(CONFIG_DEBUG_INFO_BTF)) {
> > -			pr_err("missing vmlinux BTF, cannot register kfuncs\n");
> > -			return -ENOENT;
> > -		}
> > -		if (kset->owner && IS_ENABLED(CONFIG_DEBUG_INFO_BTF_MODULES)) {
> > -			pr_err("missing module BTF, cannot register kfuncs\n");
> > -			return -ENOENT;
> > -		}
> > +		if (!kset->owner && IS_ENABLED(CONFIG_DEBUG_INFO_BTF))
> > +			pr_warn("missing vmlinux BTF, cannot register kfuncs\n");
> > +		if (kset->owner && IS_ENABLED(CONFIG_DEBUG_INFO_BTF_MODULES))
> > +			pr_warn("missing module BTF, cannot register kfuncs\n");
> >  		return 0;
> >  	}
> >  	if (IS_ERR(btf))
> > -- 
> > 2.25.1
> > 
> >
SeongJae Park June 27, 2023, 4:44 p.m. UTC | #3
On Tue, 27 Jun 2023 16:37:50 +0000 SeongJae Park <sj@kernel.org> wrote:

> Hi Jiri,
> 
> On Tue, 27 Jun 2023 18:20:39 +0200 Jiri Olsa <olsajiri@gmail.com> wrote:
> 
> > On Mon, Jun 26, 2023 at 06:11:20PM +0000, SeongJae Park wrote:
> > > __register_btf_kfunc_id_set() assumes .BTF to be part of the module's
> > > .ko file if CONFIG_DEBUG_INFO_BTF is enabled.  If that's not the case,
> > > the function prints an error message and return an error.  As a result,
> > > such modules cannot be loaded.
> > > 
> > > However, the section could be stripped out during a build process.  It
> > > would be better to let the modules loaded, because their basic
> > > functionalities have no problem[1], though the BTF functionalities will
> > > not be supported.  Make the function to lower the level of the message
> > > from error to warn, and return no error.
> > > 
> > > [1] https://lore.kernel.org/bpf/20220219082037.ow2kbq5brktf4f2u@apollo.legion/
> > > 
> > > Reported-by: Alexander Egorenkov <Alexander.Egorenkov@ibm.com>
> > > Link: https://lore.kernel.org/bpf/87y228q66f.fsf@oc8242746057.ibm.com/
> > > Suggested-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
> > > Link: https://lore.kernel.org/bpf/20220219082037.ow2kbq5brktf4f2u@apollo.legion/
> > > Fixes: dee872e124e8 ("bpf: Populate kfunc BTF ID sets in struct btf")
> > 
> > should it be this one in Fixes instead?
> >   c446fdacb10d bpf: fix register_btf_kfunc_id_set for !CONFIG_DEBUG_INFO_BTF
> 
> The commit c446fdacb10d was trying to fix commit dee872e124e8, which this patch
> is claiming to fix, by relaxing the check.  Nevertheless, it seems the check
> need to further relaxed, and therefore I wrote this patch.
> 
> For the reason, I was thinking this patch is directly fixing c446fdacb10d, but
> is also fixing a problem originally introduced by dee872e124e8.   Nevertheless,
> as the dee872e124e8 also has the Fixes tag, I think your suggestion makes

s/dee872e124e8 also has /c446fdacb10d also has /

Sorry if it made anyone be confused.


Thanks,
SJ

[...]
diff mbox series

Patch

diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c
index 6b682b8e4b50..d683f034996f 100644
--- a/kernel/bpf/btf.c
+++ b/kernel/bpf/btf.c
@@ -7848,14 +7848,10 @@  static int __register_btf_kfunc_id_set(enum btf_kfunc_hook hook,
 
 	btf = btf_get_module_btf(kset->owner);
 	if (!btf) {
-		if (!kset->owner && IS_ENABLED(CONFIG_DEBUG_INFO_BTF)) {
-			pr_err("missing vmlinux BTF, cannot register kfuncs\n");
-			return -ENOENT;
-		}
-		if (kset->owner && IS_ENABLED(CONFIG_DEBUG_INFO_BTF_MODULES)) {
-			pr_err("missing module BTF, cannot register kfuncs\n");
-			return -ENOENT;
-		}
+		if (!kset->owner && IS_ENABLED(CONFIG_DEBUG_INFO_BTF))
+			pr_warn("missing vmlinux BTF, cannot register kfuncs\n");
+		if (kset->owner && IS_ENABLED(CONFIG_DEBUG_INFO_BTF_MODULES))
+			pr_warn("missing module BTF, cannot register kfuncs\n");
 		return 0;
 	}
 	if (IS_ERR(btf))