[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190927121457.GC259443@google.com>
Date: Fri, 27 Sep 2019 13:14:57 +0100
From: Matthias Maennich <maennich@...gle.com>
To: Masahiro Yamada <yamada.masahiro@...ionext.com>
Cc: Jessica Yu <jeyu@...nel.org>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Joel Fernandes <joel@...lfernandes.org>,
Martijn Coenen <maco@...roid.com>,
Will Deacon <will.deacon@....com>,
Will Deacon <will@...nel.org>, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 3/7] module: rename __kstrtab_ns_* to __kstrtabns_* to
avoid symbol conflict
On Fri, Sep 27, 2019 at 06:35:59PM +0900, Masahiro Yamada wrote:
>The module namespace produces __strtab_ns_<sym> symbols to store
>namespace strings, but it does not guarantee the name uniqueness.
>This is a potential problem because we have exported symbols staring
>with "ns_".
>
>For example, kernel/capability.c exports the following symbols:
>
> EXPORT_SYMBOL(ns_capable);
> EXPORT_SYMBOL(capable);
>
>Assume a situation where those are converted as follows:
>
> EXPORT_SYMBOL_NS(ns_capable, some_namespace);
> EXPORT_SYMBOL_NS(capable, some_namespace);
>
>The former expands to "__kstrtab_ns_capable" and "__kstrtab_ns_ns_capable",
>and the latter to "__kstrtab_capable" and "__kstrtab_ns_capable".
>Then, we have the duplication for "__kstrtab_ns_capable".
>
>To ensure the uniqueness, rename "__kstrtab_ns_*" to "__kstrtabns_*".
Again, thanks for catching this!
Reviewed-by: Matthias Maennich <maennich@...gle.com>
Cheers,
Matthias
>Signed-off-by: Masahiro Yamada <yamada.masahiro@...ionext.com>
>---
>
> include/linux/export.h | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
>diff --git a/include/linux/export.h b/include/linux/export.h
>index 0695d4e847d9..621158ecd2e2 100644
>--- a/include/linux/export.h
>+++ b/include/linux/export.h
>@@ -55,7 +55,7 @@ extern struct module __this_module;
> "__ksymtab_" #ns NS_SEPARATOR #sym ": \n" \
> " .long " #sym "- . \n" \
> " .long __kstrtab_" #sym "- . \n" \
>- " .long __kstrtab_ns_" #sym "- . \n" \
>+ " .long __kstrtabns_" #sym "- . \n" \
> " .previous \n")
>
> #define __KSYMTAB_ENTRY(sym, sec) \
>@@ -79,7 +79,7 @@ struct kernel_symbol {
> asm("__ksymtab_" #ns NS_SEPARATOR #sym) \
> __attribute__((section("___ksymtab" sec "+" #sym), used)) \
> __aligned(sizeof(void *)) \
>- = { (unsigned long)&sym, __kstrtab_##sym, __kstrtab_ns_##sym }
>+ = { (unsigned long)&sym, __kstrtab_##sym, __kstrtabns_##sym }
>
> #define __KSYMTAB_ENTRY(sym, sec) \
> static const struct kernel_symbol __ksymtab_##sym \
>@@ -112,7 +112,7 @@ struct kernel_symbol {
> /* For every exported symbol, place a struct in the __ksymtab section */
> #define ___EXPORT_SYMBOL_NS(sym, sec, ns) \
> ___export_symbol_common(sym, sec); \
>- static const char __kstrtab_ns_##sym[] \
>+ static const char __kstrtabns_##sym[] \
> __attribute__((section("__ksymtab_strings"), used, aligned(1))) \
> = #ns; \
> __KSYMTAB_ENTRY_NS(sym, sec, ns)
>--
>2.17.1
>
Powered by blists - more mailing lists