From: Petr Mladek <pmladek@suse.com>
To: Song Liu <song@kernel.org>
Cc: "Leizhen (ThunderTown)" <thunder.leizhen@huawei.com>,
Song Liu <songliubraving@meta.com>,
"live-patching@vger.kernel.org" <live-patching@vger.kernel.org>,
"jpoimboe@kernel.org" <jpoimboe@kernel.org>,
"jikos@kernel.org" <jikos@kernel.org>,
"mbenes@suse.cz" <mbenes@suse.cz>,
"joe.lawrence@redhat.com" <joe.lawrence@redhat.com>,
Kernel Team <kernel-team@meta.com>,
"mcgrof@kernel.org" <mcgrof@kernel.org>
Subject: Re: [PATCH] kallsyms: let kallsyms_on_each_match_symbol match symbols exactly
Date: Mon, 19 Jun 2023 13:32:26 +0200 [thread overview]
Message-ID: <ZJA8yohmmf6fKsJQ@alley> (raw)
In-Reply-To: <CAPhsuW6nrQ-O3qL6TsR3rypEk03+X8z0-scGwO3Z5UAGz72Yzw@mail.gmail.com>
On Sun 2023-06-18 22:05:19, Song Liu wrote:
> On Sun, Jun 18, 2023 at 8:32 PM Leizhen (ThunderTown)
> <thunder.leizhen@huawei.com> wrote:
> >
> >
> >
> > On 2023/6/17 1:37, Song Liu wrote:
> > >
> > >
> > >> On Jun 16, 2023, at 2:31 AM, Leizhen (ThunderTown) <thunder.leizhen@huawei.com> wrote:
> > >>
> > >>
> > >>
> > >> On 2023/6/16 1:00, 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'
> > >>>
> > >>> Make kallsyms_on_each_match_symbol() to match symbols exactly. Since
> > >>> livepatch is the only user of kallsyms_on_each_match_symbol(), this
> > >>> change is safe.
> > >>>
> > >>> Signed-off-by: Song Liu <song@kernel.org>
> > >>> ---
> > >>> kernel/kallsyms.c | 17 +++++++++--------
> > >>> 1 file changed, 9 insertions(+), 8 deletions(-)
> > >>>
> > >>> diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
> > >>> index 77747391f49b..2ab459b43084 100644
> > >>> --- a/kernel/kallsyms.c
> > >>> +++ b/kernel/kallsyms.c
> > >>> @@ -187,7 +187,7 @@ static bool cleanup_symbol_name(char *s)
> > >>> return false;
> > >>> }
> > >>>
> > >>> -static int compare_symbol_name(const char *name, char *namebuf)
> > >>> +static int compare_symbol_name(const char *name, char *namebuf, bool match_exactly)
> > >>> {
> > >>> int ret;
> > >>>
> > >>> @@ -195,7 +195,7 @@ static int compare_symbol_name(const char *name, char *namebuf)
> > >>> if (!ret)
> > >>> return ret;
> > >>>
> > >>> - if (cleanup_symbol_name(namebuf) && !strcmp(name, namebuf))
> > >>> + if (!match_exactly && cleanup_symbol_name(namebuf) && !strcmp(name, namebuf))
> > >>
> > >> This may affect the lookup of static functions.
> > >
> > > I am not following why would this be a problem. Could you give an
> > > example of it?
> >
> > Here are the comments in cleanup_symbol_name(). If the compiler adds a suffix to the
> > static function, but we do not remove the suffix, will the symbol match fail?
> >
> > /*
> > * LLVM appends various suffixes for local functions and variables that
> > * must be promoted to global scope as part of LTO. This can break
> > * hooking of static functions with kprobes. '.' is not a valid
> > * character in an identifier in C. Suffixes observed:
> > * - foo.llvm.[0-9a-f]+
> > * - foo.[0-9a-f]+
> > */
>
> I think livepatch will not fail, as the tool chain should already match the
> suffix for the function being patched. If the tool chain failed to do so,
> livepatch can fail for other reasons (missing symbols, etc.)
cleanup_symbol_name() has been added by the commit 8b8e6b5d3b013b0bd8
("kallsyms: strip ThinLTO hashes from static functions"). The
motivation is that user space tools pass the symbol names found
in sources. They do not know about the "random" suffix added
by the "random" compiler.
While livepatching might want to work with the full symbol names.
It helps to locate avoid duplication and find the right symbol.
At least, this should be beneficial for kpatch tool which works directly
with the generated symbols.
Well, in theory, the cleaned symbol names might be useful for
source-based livepatches. But there might be problem to
distinguish different symbols with the same name and symbols
duplicated because of inlining. Well, we tend to livepatch
the caller anyway.
Best Regards,
Petr
next prev parent reply other threads:[~2023-06-19 11:32 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-15 17:00 [PATCH] kallsyms: let kallsyms_on_each_match_symbol match symbols exactly Song Liu
2023-06-16 2:19 ` Leizhen (ThunderTown)
2023-06-16 5:01 ` Song Liu
2023-06-16 8:11 ` Leizhen (ThunderTown)
2023-06-16 8:43 ` Leizhen (ThunderTown)
2023-06-16 8:52 ` Leizhen (ThunderTown)
2023-06-16 17:40 ` Song Liu
2023-06-16 9:31 ` Leizhen (ThunderTown)
2023-06-16 17:37 ` Song Liu
2023-06-19 3:32 ` Leizhen (ThunderTown)
2023-06-19 5:05 ` Song Liu
2023-06-19 11:32 ` Petr Mladek [this message]
2023-06-20 22:36 ` Song Liu
2023-06-21 8:52 ` Petr Mladek
2023-06-21 19:18 ` Song Liu
2023-06-21 22:34 ` Yonghong Song
2023-06-22 13:35 ` Petr Mladek
2023-06-22 16:10 ` Yonghong Song
[not found] ` <4616610E-180A-4417-8592-B864F6298C7F@fb.com>
2023-06-22 20:45 ` Yonghong Song
2023-06-23 17:43 ` Nick Desaulniers
2023-06-25 19:06 ` Yonghong Song
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZJA8yohmmf6fKsJQ@alley \
--to=pmladek@suse.com \
--cc=jikos@kernel.org \
--cc=joe.lawrence@redhat.com \
--cc=jpoimboe@kernel.org \
--cc=kernel-team@meta.com \
--cc=live-patching@vger.kernel.org \
--cc=mbenes@suse.cz \
--cc=mcgrof@kernel.org \
--cc=song@kernel.org \
--cc=songliubraving@meta.com \
--cc=thunder.leizhen@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox