From: Yonghong Song <yhs@meta.com>
To: Song Liu <songliubraving@meta.com>
Cc: Petr Mladek <pmladek@suse.com>, Song Liu <song@kernel.org>,
"Leizhen (ThunderTown)" <thunder.leizhen@huawei.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>,
Jack Pham <jackp@codeaurora.org>,
Sami Tolvanen <samitolvanen@google.com>,
Kees Cook <keescook@chromium.org>,
Nathan Chancellor <nathan@kernel.org>,
Peter Zijlstra <peterz@infradead.org>, "KE.LI" <like1@oppo.com>,
Padmanabha Srinivasaiah <treasure4paddy@gmail.com>,
Fangrui Song <maskray@google.com>,
Nick Desaulniers <ndesaulniers@google.com>
Subject: Re: [PATCH] kallsyms: let kallsyms_on_each_match_symbol match symbols exactly
Date: Thu, 22 Jun 2023 13:45:55 -0700 [thread overview]
Message-ID: <cd0eaf00-7cb5-722f-4745-0660f58f22cb@meta.com> (raw)
In-Reply-To: <4616610E-180A-4417-8592-B864F6298C7F@fb.com>
On 6/22/23 1:33 PM, Song Liu wrote:
>
>
>> On Jun 22, 2023, at 9:10 AM, Yonghong Song <yhs@meta.com> wrote:
>
> [...]
>
>>
>>> Effect from the tracers POV?
>>> 1. .llvm.<hash> suffix
>>> The names without the .llvm.<hash> suffix are the same as without
>>> LTO. This is probably why commit 8b8e6b5d3b013b0b ("kallsyms: strip
>>> ThinLTO hashes from static functions") worked. The tracers probably
>>> wanted to access only the symbols with uniqueue names
>>> 2. <function>.<symbol> name
>>> The name without the .<symbol> suffix is the same as the function
>>> name. The result are duplicated function names.
>>> I do not understand why this was not a problem for tracers.
>>> Note that this is pretty common. _entry and _entry_ptr are
>>> added into any function calling printk().
>>> It seems to be working only by chance. Maybe, the tracers always
>>> take the first matched symbol. And the function name, without
>>> any suffix, is always the first one in the sorted list.
>>
>> Note this only happens in LTO mode. Maybe lto kernel is not used
>> wide enough to discover this issue?
>
> I think this is because all these <function>.<symbol> are data, while
> tracers are looking for functions.
>
>>
>>> Effect from livepatching POV:
>>> 1. .llvm.<hash> suffix
>>> Comparing the full symbol name looks fragile to me because
>>> the <hash> might change.
>>> IMHO, it would be better to compare the names without
>>> the .llvm.<hash> suffix even for livepatches.
>>> 2. <function>.<symbol> name
>>> The removal of <.symbol> suffix is a bad idea. The livepatch
>>> code is not able to distinguish the symbol of the <function>
>>> and static variables defined in this function.
>>> IMHO, it would be better to compare the full
>>> <function>.<symbol> name.
>>> Result:
>>> IMHO, cleanup_symbol_name() should remove only .llwn.* suffix.
>>> And it should be used for both tracers and livepatching.
>>> Does this makes any sense?
>>
>> Song, does this fix the problem?
>
> I think this should work. We also see .str.<num.>llvm.<hash>.
> But those should not matter.
For some string constants, llvm may create a local symbol with
name like '.str'. If there are more than one such local
symbols, they become '.str.<num>'. Then when they got promoted
to global they become '.str.<num>.llvm.<hash>'.
>
> Thanks,
> Song
>
>>
>> I only checked llvm15 and llvm17, not sure what kind of
>> suffix'es used for early llvm (>= llvm11).
>> Nick, could you help answer this question? What kind
>> of suffix are used for lto when promoting a local symbol
>> to a global one, considering all versions of llvm >= 11
>> since llvm 11 is the minimum supported version for kernel build.
>
next prev parent reply other threads:[~2023-06-22 20:47 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
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 [this message]
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=cd0eaf00-7cb5-722f-4745-0660f58f22cb@meta.com \
--to=yhs@meta.com \
--cc=jackp@codeaurora.org \
--cc=jikos@kernel.org \
--cc=joe.lawrence@redhat.com \
--cc=jpoimboe@kernel.org \
--cc=keescook@chromium.org \
--cc=kernel-team@meta.com \
--cc=like1@oppo.com \
--cc=live-patching@vger.kernel.org \
--cc=maskray@google.com \
--cc=mbenes@suse.cz \
--cc=mcgrof@kernel.org \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=peterz@infradead.org \
--cc=pmladek@suse.com \
--cc=samitolvanen@google.com \
--cc=song@kernel.org \
--cc=songliubraving@meta.com \
--cc=thunder.leizhen@huawei.com \
--cc=treasure4paddy@gmail.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