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. `-z uniq-symbol` linker flag which we are planning to use to 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@xxxxxxxxxxxxxxx # 3.17+ Signed-off-by: Alexander Lobakin <alexandr.lobakin@xxxxxxxxx> --- scripts/mod/modpost.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index cb8ab7d91d30..ccc6d35580f2 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -1971,7 +1971,7 @@ static char *remove_dot(char *s) if (n && s[n]) { size_t m = strspn(s + n + 1, "0123456789"); - if (m && (s[n + m] == '.' || s[n + m] == 0)) + if (m && (s[n + m + 1] == '.' || s[n + m + 1] == 0)) s[n] = 0; /* strip trailing .lto */ -- 2.33.1