btf: warn but return no error for NULL btf from __register_btf_kfunc_id_set()
Subsystems (2)
PATCH v2 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]/
---
Changes from v1
(https://lore.kernel.org/all/[email protected]/)
- Fix Fixes: tag (Jiri Olsa)
- Add 'Acked-by: ' from Jiri Olsa
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
Daniel Borkmann
maintainerQuoted 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
Reported-by Alexander Egorenkov <[email protected]>Suggested-by Kumar Kartikeya Dwivedi <[email protected]>Fixes c446fdacb10d ("bpf: fix register_btf_kfunc_id_set for !CONFIG_DEBUG_INFO_BTF")Cc <[email protected]> # 5.18.xSigned-off-by SeongJae Park <[email protected]>Acked-by Jiri Olsa <[email protected]>
I presume this one is targeted at bpf (rather than bpf-next) tree, right?
kernel/bpf/btf.c static int __register_btf_kfunc_id_set(enum btf_kfunc_hook hook, · line 7854
Quoted 12 lines
kernel/bpf/btf.c +0
-4@@ -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 ; - }
Why the above one needs to be changed? Do you also run into this case? vmlinux BTF should be built-in in this case. I understand it's rather the one below for BTF + modules instead, no?
Quoted 12 lines
kernel/bpf/btf.c +4
-4-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))
Hi Daniel,
Quoted 23 lines · On Fri, 30 Jun 2023 16:53:38 +0200 Daniel Borkmann <[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
Reported-by Alexander Egorenkov <[email protected]>Suggested-by Kumar Kartikeya Dwivedi <[email protected]>Fixes c446fdacb10d ("bpf: fix register_btf_kfunc_id_set for !CONFIG_DEBUG_INFO_BTF")Cc <[email protected]> # 5.18.xSigned-off-by SeongJae Park <[email protected]>Acked-by Jiri Olsa <[email protected]>
Quoted 1 line
I presume this one is targeted at bpf (rather than bpf-next) tree, right?
You're correct. It's not urgent for us, but I would prefer it to be merged into all affected kernels as early as possible.
Quoted 7 lines
Quoted 7 lines
kernel/bpf/btf.c +0
-0@@ -7848,14 +7848,10 @@ static int __register_btf_kfunc_id_set(enum btf_kfunc_hook hook,
Quoted 10 lines
kernel/bpf/btf.c static int __register_btf_kfunc_id_set(enum btf_kfunc_hook hook, · line 7854
Quoted 6 lines
kernel/bpf/btf.c +0
-4btf =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 ; - }Why the above one needs to be changed? Do you also run into this case? vmlinux BTF should be built-in in this case. I understand it's rather the one below for BTF + modules instead, no?
Again, you're correct. This change is not really needed. I was interpreting Kumar's suggestion merely into code without thinking about his real meaning, sorry. I will restore this in the next spin.
Thanks,
SJ
Quoted 15 lines
Quoted 13 lines
kernel/bpf/btf.c +4
-4-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))
Daniel Borkmann
maintainerQuoted 24 lines · SeongJae Park
Quoted 23 lines · On Fri, 30 Jun 2023 16:53:38 +0200 Daniel Borkmann <[email protected]> wrote:
Quoted 21 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.
[1] https://lore.kernel.org/bpf/[email protected]/
Reported-by Alexander Egorenkov <[email protected]>Suggested-by Kumar Kartikeya Dwivedi <[email protected]>Fixes c446fdacb10d ("bpf: fix register_btf_kfunc_id_set for !CONFIG_DEBUG_INFO_BTF")Cc <[email protected]> # 5.18.xSigned-off-by SeongJae Park <[email protected]>Acked-by Jiri Olsa <[email protected]>
Quoted 4 lines
Quoted 1 line
I presume this one is targeted at bpf (rather than bpf-next) tree, right?
You're correct. It's not urgent for us, but I would prefer it to be merged into all affected kernels as early as possible.
Ok, sounds good, bpf tree it is then.
Quoted 17 lines
Quoted 6 lines
Quoted 6 lines
kernel/bpf/btf.c +0
-0@@ -7848,14 +7848,10 @@ static int __register_btf_kfunc_id_set(enum btf_kfunc_hook hook,Quoted 10 lines
kernel/bpf/btf.c static int __register_btf_kfunc_id_set(enum btf_kfunc_hook hook, · line 7854
Quoted 6 lines
kernel/bpf/btf.c +0
-4btf =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 ; - }Why the above one needs to be changed? Do you also run into this case? vmlinux BTF should be built-in in this case. I understand it's rather the one below for BTF + modules instead, no?
Quoted 3 lines
Again, you're correct. This change is not really needed. I was interpreting Kumar's suggestion merely into code without thinking about his real meaning, sorry. I will restore this in the next spin.
Perfect, I think after your v3 respin it should be good to land.
Thanks,
Daniel
Quoted 49 lines · On Fri, 30 Jun 2023 22:52:24 +0200 Daniel Borkmann <[email protected]> wrote:
Quoted 24 lines · SeongJae Park
Quoted 23 lines · On Fri, 30 Jun 2023 16:53:38 +0200 Daniel Borkmann <[email protected]> wrote:
Quoted 21 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.
[1] https://lore.kernel.org/bpf/[email protected]/
Reported-by Alexander Egorenkov <[email protected]>Suggested-by Kumar Kartikeya Dwivedi <[email protected]>Fixes c446fdacb10d ("bpf: fix register_btf_kfunc_id_set for !CONFIG_DEBUG_INFO_BTF")Cc <[email protected]> # 5.18.xSigned-off-by SeongJae Park <[email protected]>Acked-by Jiri Olsa <[email protected]>Quoted 4 lines
Quoted 1 line
I presume this one is targeted at bpf (rather than bpf-next) tree, right?
You're correct. It's not urgent for us, but I would prefer it to be merged into all affected kernels as early as possible.
Ok, sounds good, bpf tree it is then.
Quoted 17 lines
Quoted 16 lines
kernel/bpf/btf.c static int __register_btf_kfunc_id_set(enum btf_kfunc_hook hook, · line 7854
Quoted 12 lines
kernel/bpf/btf.c +0
-4@@ -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 ; - }Why the above one needs to be changed? Do you also run into this case? vmlinux BTF should be built-in in this case. I understand it's rather the one below for BTF + modules instead, no?
Quoted 5 lines
Quoted 3 lines
Again, you're correct. This change is not really needed. I was interpreting Kumar's suggestion merely into code without thinking about his real meaning, sorry. I will restore this in the next spin.
Perfect, I think after your v3 respin it should be good to land.
Thank you! I will send it by tomorrow, to give people enough time to comment. If you don't want to wait, please let me know :)
Also, please note that this will not cleanly applicable on 6.1.y. I will provide the backport to stable@ as soon as this is merged into the mainline.
Thanks,
SJ
Quoted 4 lines
Thanks,
Daniel
Daniel Borkmann
maintainerOn 6/30/23 11:02 PM, SeongJae Park wrote:
[...]
Quoted 2 lines
Also, please note that this will not cleanly applicable on 6.1.y. I will provide the backport to stable@ as soon as this is merged into the mainline.
Perfect, thanks!