From: Borislav Petkov bp@alien8.de Date: Thu, 23 Dec 2021 17:19:06 +0100
On Thu, Dec 23, 2021 at 01:21:55AM +0100, Alexander Lobakin wrote:
For now, that condition from remove_dot():
if (m && (s[n + m] == '.' || s[n + m] == 0))
which was designed to test if it's a dot or a \0 after the suffix is never satisfied. This is due to that s[n + m] always points to the last digit of a numeric suffix, not on the symbol next to it:
param_set_uint.0, s[n + m] is '0', s[n + m + 1] is '\0'
So it's off by one and was like that since 2014.
What's the relevance of this? Looking at
7d02b490e93c ("Kbuild, lto: Drop .number postfixes in modpost")
what you're fixing here is something LTO-related. How do you trigger this?
It's just a couple lines below. I trigger this using `-z uniq-symbol` which uses numeric suffixes for globals as well.
For a Cc:stable patch, I'm missing a lot of context.
It fixes a commit dated 2014, thus Cc:stable. Although the remove_dot() might've been introduced for neverlanded GCC LTO, but in fact numeric suffixes are used a lot by the toolchains in regular builds as well. Just not for globals, that's why it's "well hidden".
`-z uniq-symbol` linker flag which we are planning to use to
^^
Who's "we"?
I thought it's a common saying in commit messages, isn't it?
simplify livepatching brings numeric suffixes back, fix this. Otherwise:
ERROR: modpost: "param_set_uint.0" [vmlinux] is a static EXPORT_SYMBOL
Fixes: fcd38ed0ff26 ("scripts: modpost: fix compilation warning") Cc: stable@vger.kernel.org # 3.17+ Signed-off-by: Alexander Lobakin alexandr.lobakin@intel.com
...
-- Regards/Gruss, Boris.
Thanks, Al