On Fri 2023-06-02 16:24:01, Song Liu wrote: > With CONFIG_LTO_CLANG, kallsyms.c:cleanup_symbol_name() removes symbols > suffixes during comparison. This is problematic for livepatch, as > kallsyms_on_each_match_symbol may find multiple matches for the same > symbol, and fail with: > > livepatch: unresolvable ambiguity for symbol 'xxx' in object 'yyy' > > Fix this by using kallsyms_on_each_symbol instead, and matching symbols > exactly. > > --- a/kernel/livepatch/core.c > +++ b/kernel/livepatch/core.c > @@ -166,7 +159,7 @@ static int klp_find_object_symbol(const char *objname, const char *name, > if (objname) > module_kallsyms_on_each_symbol(objname, klp_find_callback, &args); > else > - kallsyms_on_each_match_symbol(klp_match_callback, name, &args); > + kallsyms_on_each_symbol(klp_find_callback, &args); AFAIK, you have put a lot of effort to optimize the search recently. The speedup was amazing, see commit 4dc533e0f2c04174e1ae ("kallsyms: Add helper kallsyms_on_each_match_symbol()"). Do we really need to waste this effort completely? What about creating variants: + kallsyms_on_each_match_exact_symbol() + kallsyms_lookup_exact_names() + compare_exact_symbol_name() Where compare_exact_symbol_name() would not try comparing with cleanup_symbol_name()? > > /* > * Ensure an address was found. If sympos is 0, ensure symbol is unique; Otherwise, the patch looks fine. It is acceptable for me. I just want to be sure that we considered the above alternative solution. Best Regards, Petr