Commit c446fdac authored by Stanislav Fomichev's avatar Stanislav Fomichev Committed by Alexei Starovoitov
Browse files

bpf: fix register_btf_kfunc_id_set for !CONFIG_DEBUG_INFO_BTF



Commit dee872e1 ("bpf: Populate kfunc BTF ID sets in struct btf")
breaks loading of some modules when CONFIG_DEBUG_INFO_BTF is not set.
register_btf_kfunc_id_set returns -ENOENT to the callers when
there is no module btf. Let's return 0 (success) instead to let
those modules work in !CONFIG_DEBUG_INFO_BTF cases.

Acked-by: default avatarKumar Kartikeya Dwivedi <memxor@gmail.com>
Fixes: dee872e1 ("bpf: Populate kfunc BTF ID sets in struct btf")
Signed-off-by: default avatarStanislav Fomichev <sdf@google.com>
Link: https://lore.kernel.org/r/20220126001340.1573649-1-sdf@google.com


Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent fc1ca955
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -6740,8 +6740,19 @@ int register_btf_kfunc_id_set(enum bpf_prog_type prog_type,
	int ret;

	btf = btf_get_module_btf(kset->owner);
	if (IS_ERR_OR_NULL(btf))
		return btf ? PTR_ERR(btf) : -ENOENT;
	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;
		}
		return 0;
	}
	if (IS_ERR(btf))
		return PTR_ERR(btf);

	hook = bpf_prog_type_to_kfunc_hook(prog_type);
	ret = btf_populate_kfunc_set(btf, hook, kset);