Commit fa6643cd authored by Masahiro Yamada's avatar Masahiro Yamada Committed by Jessica Yu
Browse files

module: rename __kstrtab_ns_* to __kstrtabns_* to avoid symbol conflict



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 starting
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 duplicated "__kstrtab_ns_capable".

To ensure the uniqueness, rename "__kstrtab_ns_*" to "__kstrtabns_*".

Reviewed-by: default avatarMatthias Maennich <maennich@google.com>
Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: default avatarJessica Yu <jeyu@kernel.org>
parent 389eb3f5
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -55,7 +55,7 @@ extern struct module __this_module;
	    "__ksymtab_" #ns NS_SEPARATOR #sym ":		\n"	\
	    "__ksymtab_" #ns NS_SEPARATOR #sym ":		\n"	\
	    "	.long	" #sym "- .				\n"	\
	    "	.long	" #sym "- .				\n"	\
	    "	.long	__kstrtab_" #sym "- .			\n"	\
	    "	.long	__kstrtab_" #sym "- .			\n"	\
	    "	.long	__kstrtab_ns_" #sym "- .		\n"	\
	    "	.long	__kstrtabns_" #sym "- .			\n"	\
	    "	.previous					\n")
	    "	.previous					\n")


#define __KSYMTAB_ENTRY(sym, sec)					\
#define __KSYMTAB_ENTRY(sym, sec)					\
@@ -79,7 +79,7 @@ struct kernel_symbol {
	asm("__ksymtab_" #ns NS_SEPARATOR #sym)				\
	asm("__ksymtab_" #ns NS_SEPARATOR #sym)				\
	__attribute__((section("___ksymtab" sec "+" #sym), used))	\
	__attribute__((section("___ksymtab" sec "+" #sym), used))	\
	__aligned(sizeof(void *))					\
	__aligned(sizeof(void *))					\
	= { (unsigned long)&sym, __kstrtab_##sym, __kstrtab_ns_##sym }
	= { (unsigned long)&sym, __kstrtab_##sym, __kstrtabns_##sym }


#define __KSYMTAB_ENTRY(sym, sec)					\
#define __KSYMTAB_ENTRY(sym, sec)					\
	static const struct kernel_symbol __ksymtab_##sym		\
	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 */
/* For every exported symbol, place a struct in the __ksymtab section */
#define ___EXPORT_SYMBOL_NS(sym, sec, ns)				\
#define ___EXPORT_SYMBOL_NS(sym, sec, ns)				\
	___export_symbol_common(sym, sec);				\
	___export_symbol_common(sym, sec);				\
	static const char __kstrtab_ns_##sym[]				\
	static const char __kstrtabns_##sym[]				\
	__attribute__((section("__ksymtab_strings"), used, aligned(1)))	\
	__attribute__((section("__ksymtab_strings"), used, aligned(1)))	\
	= #ns;								\
	= #ns;								\
	__KSYMTAB_ENTRY_NS(sym, sec, ns)
	__KSYMTAB_ENTRY_NS(sym, sec, ns)