btf: warn but return no error for NULL btf from __register_btf_kfunc_id_set()
Subsystems (2)
PATCH 1/1 btf: warn but return no error for NULL btf from __register_btf_kfunc_id_set()
__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/[email protected]/
--- kernel/bpf/btf.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)
kernel/bpf/btf.c +4 -8
@@ -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))
Signature · 1 line
2.25.1
Quoted 11 lines · SeongJae Park
__register_btf_kfunc_id_set()assumes .BTF to be part of the module's .ko file ifCONFIG_DEBUG_INFO_BTFis 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.
Quoted 7 lines
[1] https://lore.kernel.org/bpf/[email protected]/
Reported-by Alexander Egorenkov <[email protected]>Suggested-by Kumar Kartikeya Dwivedi <[email protected]>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
jirka
Quoted 33 lines
Cc <[email protected]> # 5.17.xSigned-off-by SeongJae Park <[email protected]>--- kernel/bpf/btf.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)kernel/bpf/btf.c +4
-8@@ -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))Signature · 1 line
2.25.1
Hi Jiri,
Quoted 14 lines · On Tue, 27 Jun 2023 18:20:39 +0200 Jiri Olsa <[email protected]> wrote:
Quoted 13 lines · SeongJae Park
__register_btf_kfunc_id_set()assumes .BTF to be part of the module's .ko file ifCONFIG_DEBUG_INFO_BTFis 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.
Quoted 8 lines
Quoted 5 lines
Reported-by Alexander Egorenkov <[email protected]>Suggested-by Kumar Kartikeya Dwivedi <[email protected]>Fixes dee872e124e8 ("bpf: Populate kfunc BTF ID sets in struct btf")should it be this one in Fixes instead?
c446fdacb10dbpf: fixregister_btf_kfunc_id_setfor !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.
Quoted 4 lines
other than that looks good
Acked-by Jiri Olsa <[email protected]>
Thank you, I will also add this to the next version of this patch :)
Thanks,
SJ
Quoted 36 lines
jirka
Quoted 33 lines
Cc <[email protected]> # 5.17.xSigned-off-by SeongJae Park <[email protected]>--- kernel/bpf/btf.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)kernel/bpf/btf.c +4
-8@@ -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))Signature · 1 line
2.25.1
Quoted 27 lines · On Tue, 27 Jun 2023 16:37:50 +0000 SeongJae Park <[email protected]> wrote:
Hi Jiri,
Quoted 14 lines · On Tue, 27 Jun 2023 18:20:39 +0200 Jiri Olsa <[email protected]> wrote:
Quoted 13 lines · SeongJae Park
__register_btf_kfunc_id_set()assumes .BTF to be part of the module's .ko file ifCONFIG_DEBUG_INFO_BTFis 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.
Quoted 8 lines
Quoted 5 lines
Reported-by Alexander Egorenkov <[email protected]>Suggested-by Kumar Kartikeya Dwivedi <[email protected]>Fixes dee872e124e8 ("bpf: Populate kfunc BTF ID sets in struct btf")should it be this one in Fixes instead?
c446fdacb10dbpf: fixregister_btf_kfunc_id_setfor !CONFIG_DEBUG_INFO_BTF
Quoted 7 lines
The commit
c446fdacb10dwas trying to fix commitdee872e124e8, 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 bydee872e124e8. Nevertheless,
as thedee872e124e8also 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
[...]