All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] export: fix string handling of namespace in EXPORT_SYMBOL_NS
@ 2022-01-08 14:04 Greg Kroah-Hartman
  2022-01-10 17:38 ` Matthias Maennich
  2022-01-11 19:14 ` Masahiro Yamada
  0 siblings, 2 replies; 4+ messages in thread
From: Greg Kroah-Hartman @ 2022-01-08 14:04 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, Miroslav Benes, Emil Velikov, Jessica Yu,
	Quentin Perret, Masahiro Yamada, Matthias Maennich

Commit c3a6cf19e695 ("export: avoid code duplication in
include/linux/export.h") broke the ability for a defined string to be
used as a namespace value.  Fix this up by adding another layer of
indirection to preserve the previous functionality.

Fixes: c3a6cf19e695 ("export: avoid code duplication in include/linux/export.h")
Cc: Miroslav Benes <mbenes@suse.cz>
Cc: Emil Velikov <emil.l.velikov@gmail.com>
Cc: Jessica Yu <jeyu@kernel.org>
Cc: Quentin Perret <qperret@google.com>
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
Cc: Matthias Maennich <maennich@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
Note, I found this while forward porting an out-of-tree Android kernel
patch from 5.4 to 5.10 that used module namespaces to help wall-off vfs
symbols from being used by non-filesystem modules.  This issue does not
affect any in-kernel code, so I am not so sure if it really is needed
here, but it does restore the previous functionality that was being used
in older kernels so it might be good to put back in case others want to
do much the same thing.

 include/linux/export.h | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/include/linux/export.h b/include/linux/export.h
index 27d848712b90..9a992809f57d 100644
--- a/include/linux/export.h
+++ b/include/linux/export.h
@@ -162,8 +162,10 @@ struct kernel_symbol {
 
 #define EXPORT_SYMBOL(sym)		_EXPORT_SYMBOL(sym, "")
 #define EXPORT_SYMBOL_GPL(sym)		_EXPORT_SYMBOL(sym, "_gpl")
-#define EXPORT_SYMBOL_NS(sym, ns)	__EXPORT_SYMBOL(sym, "", #ns)
-#define EXPORT_SYMBOL_NS_GPL(sym, ns)	__EXPORT_SYMBOL(sym, "_gpl", #ns)
+#define _EXPORT_SYMBOL_NS(sym, ns)	__EXPORT_SYMBOL(sym, "", #ns)
+#define _EXPORT_SYMBOL_NS_GPL(sym, ns)	__EXPORT_SYMBOL(sym, "_gpl", #ns)
+#define EXPORT_SYMBOL_NS(sym, ns)	_EXPORT_SYMBOL_NS(sym, ns)
+#define EXPORT_SYMBOL_NS_GPL(sym, ns)	_EXPORT_SYMBOL_NS_GPL(sym, ns)
 
 #endif /* !__ASSEMBLY__ */
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] export: fix string handling of namespace in EXPORT_SYMBOL_NS
  2022-01-08 14:04 [PATCH] export: fix string handling of namespace in EXPORT_SYMBOL_NS Greg Kroah-Hartman
@ 2022-01-10 17:38 ` Matthias Maennich
  2022-01-11 19:14 ` Masahiro Yamada
  1 sibling, 0 replies; 4+ messages in thread
From: Matthias Maennich @ 2022-01-10 17:38 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, Miroslav Benes, Emil Velikov, Jessica Yu,
	Quentin Perret, Masahiro Yamada

On Sat, Jan 08, 2022 at 03:04:15PM +0100, Greg Kroah-Hartman wrote:
>Commit c3a6cf19e695 ("export: avoid code duplication in
>include/linux/export.h") broke the ability for a defined string to be
>used as a namespace value.  Fix this up by adding another layer of
>indirection to preserve the previous functionality.
>
>Fixes: c3a6cf19e695 ("export: avoid code duplication in include/linux/export.h")
>Cc: Miroslav Benes <mbenes@suse.cz>
>Cc: Emil Velikov <emil.l.velikov@gmail.com>
>Cc: Jessica Yu <jeyu@kernel.org>
>Cc: Quentin Perret <qperret@google.com>
>Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
>Cc: Matthias Maennich <maennich@google.com>
>Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Reviewed-by: Matthias Maennich <maennich@google.com>

Cheers,
Matthias

>---
>Note, I found this while forward porting an out-of-tree Android kernel
>patch from 5.4 to 5.10 that used module namespaces to help wall-off vfs
>symbols from being used by non-filesystem modules.  This issue does not
>affect any in-kernel code, so I am not so sure if it really is needed
>here, but it does restore the previous functionality that was being used
>in older kernels so it might be good to put back in case others want to
>do much the same thing.
>
> include/linux/export.h | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
>diff --git a/include/linux/export.h b/include/linux/export.h
>index 27d848712b90..9a992809f57d 100644
>--- a/include/linux/export.h
>+++ b/include/linux/export.h
>@@ -162,8 +162,10 @@ struct kernel_symbol {
>
> #define EXPORT_SYMBOL(sym)		_EXPORT_SYMBOL(sym, "")
> #define EXPORT_SYMBOL_GPL(sym)		_EXPORT_SYMBOL(sym, "_gpl")
>-#define EXPORT_SYMBOL_NS(sym, ns)	__EXPORT_SYMBOL(sym, "", #ns)
>-#define EXPORT_SYMBOL_NS_GPL(sym, ns)	__EXPORT_SYMBOL(sym, "_gpl", #ns)
>+#define _EXPORT_SYMBOL_NS(sym, ns)	__EXPORT_SYMBOL(sym, "", #ns)
>+#define _EXPORT_SYMBOL_NS_GPL(sym, ns)	__EXPORT_SYMBOL(sym, "_gpl", #ns)
>+#define EXPORT_SYMBOL_NS(sym, ns)	_EXPORT_SYMBOL_NS(sym, ns)
>+#define EXPORT_SYMBOL_NS_GPL(sym, ns)	_EXPORT_SYMBOL_NS_GPL(sym, ns)
>
> #endif /* !__ASSEMBLY__ */
>
>-- 
>2.34.1
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] export: fix string handling of namespace in EXPORT_SYMBOL_NS
  2022-01-08 14:04 [PATCH] export: fix string handling of namespace in EXPORT_SYMBOL_NS Greg Kroah-Hartman
  2022-01-10 17:38 ` Matthias Maennich
@ 2022-01-11 19:14 ` Masahiro Yamada
  2022-04-27  8:42   ` Greg Kroah-Hartman
  1 sibling, 1 reply; 4+ messages in thread
From: Masahiro Yamada @ 2022-01-11 19:14 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Linux Kernel Mailing List, Miroslav Benes, Emil Velikov,
	Jessica Yu, Quentin Perret, Matthias Maennich

On Sat, Jan 8, 2022 at 11:04 PM Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> Commit c3a6cf19e695 ("export: avoid code duplication in
> include/linux/export.h") broke the ability for a defined string to be
> used as a namespace value.  Fix this up by adding another layer of
> indirection to preserve the previous functionality.
>
> Fixes: c3a6cf19e695 ("export: avoid code duplication in include/linux/export.h")
> Cc: Miroslav Benes <mbenes@suse.cz>
> Cc: Emil Velikov <emil.l.velikov@gmail.com>
> Cc: Jessica Yu <jeyu@kernel.org>
> Cc: Quentin Perret <qperret@google.com>
> Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
> Cc: Matthias Maennich <maennich@google.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ---
> Note, I found this while forward porting an out-of-tree Android kernel
> patch from 5.4 to 5.10 that used module namespaces to help wall-off vfs
> symbols from being used by non-filesystem modules.  This issue does not
> affect any in-kernel code, so I am not so sure if it really is needed
> here, but it does restore the previous functionality that was being used
> in older kernels so it might be good to put back in case others want to
> do much the same thing.
>
>  include/linux/export.h | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/export.h b/include/linux/export.h
> index 27d848712b90..9a992809f57d 100644
> --- a/include/linux/export.h
> +++ b/include/linux/export.h
> @@ -162,8 +162,10 @@ struct kernel_symbol {
>
>  #define EXPORT_SYMBOL(sym)             _EXPORT_SYMBOL(sym, "")
>  #define EXPORT_SYMBOL_GPL(sym)         _EXPORT_SYMBOL(sym, "_gpl")
> -#define EXPORT_SYMBOL_NS(sym, ns)      __EXPORT_SYMBOL(sym, "", #ns)
> -#define EXPORT_SYMBOL_NS_GPL(sym, ns)  __EXPORT_SYMBOL(sym, "_gpl", #ns)
> +#define _EXPORT_SYMBOL_NS(sym, ns)     __EXPORT_SYMBOL(sym, "", #ns)
> +#define _EXPORT_SYMBOL_NS_GPL(sym, ns) __EXPORT_SYMBOL(sym, "_gpl", #ns)
> +#define EXPORT_SYMBOL_NS(sym, ns)      _EXPORT_SYMBOL_NS(sym, ns)
> +#define EXPORT_SYMBOL_NS_GPL(sym, ns)  _EXPORT_SYMBOL_NS_GPL(sym, ns)
>
>  #endif /* !__ASSEMBLY__ */
>
> --
> 2.34.1
>

I see __stringify() a few files above.
So, you can use it here as well.


Does the following code work?   (untested)





diff --git a/include/linux/export.h b/include/linux/export.h
index 27d848712b90..5910ccb66ca2 100644
--- a/include/linux/export.h
+++ b/include/linux/export.h
@@ -2,6 +2,8 @@
 #ifndef _LINUX_EXPORT_H
 #define _LINUX_EXPORT_H

+#include <linux/stringify.h>
+
 /*
  * Export symbols from the kernel to modules.  Forked from module.h
  * to reduce the amount of pointless cruft we feed to gcc when only
@@ -154,7 +156,6 @@ struct kernel_symbol {
 #endif /* CONFIG_MODULES */

 #ifdef DEFAULT_SYMBOL_NAMESPACE
-#include <linux/stringify.h>
 #define _EXPORT_SYMBOL(sym, sec)       __EXPORT_SYMBOL(sym, sec,
__stringify(DEFAULT_SYMBOL_NAMESPACE))
 #else
 #define _EXPORT_SYMBOL(sym, sec)       __EXPORT_SYMBOL(sym, sec, "")
@@ -162,8 +163,8 @@ struct kernel_symbol {

 #define EXPORT_SYMBOL(sym)             _EXPORT_SYMBOL(sym, "")
 #define EXPORT_SYMBOL_GPL(sym)         _EXPORT_SYMBOL(sym, "_gpl")
-#define EXPORT_SYMBOL_NS(sym, ns)      __EXPORT_SYMBOL(sym, "", #ns)
-#define EXPORT_SYMBOL_NS_GPL(sym, ns)  __EXPORT_SYMBOL(sym, "_gpl", #ns)
+#define EXPORT_SYMBOL_NS(sym, ns)      __EXPORT_SYMBOL(sym, "",
__stringify(ns))
+#define EXPORT_SYMBOL_NS_GPL(sym, ns)  __EXPORT_SYMBOL(sym, "_gpl",
__stringify(ns))

 #endif /* !__ASSEMBLY__ */






-- 
Best Regards
Masahiro Yamada

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] export: fix string handling of namespace in EXPORT_SYMBOL_NS
  2022-01-11 19:14 ` Masahiro Yamada
@ 2022-04-27  8:42   ` Greg Kroah-Hartman
  0 siblings, 0 replies; 4+ messages in thread
From: Greg Kroah-Hartman @ 2022-04-27  8:42 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Linux Kernel Mailing List, Miroslav Benes, Emil Velikov,
	Jessica Yu, Quentin Perret, Matthias Maennich

On Wed, Jan 12, 2022 at 04:14:00AM +0900, Masahiro Yamada wrote:
> On Sat, Jan 8, 2022 at 11:04 PM Greg Kroah-Hartman
> <gregkh@linuxfoundation.org> wrote:
> >
> > Commit c3a6cf19e695 ("export: avoid code duplication in
> > include/linux/export.h") broke the ability for a defined string to be
> > used as a namespace value.  Fix this up by adding another layer of
> > indirection to preserve the previous functionality.
> >
> > Fixes: c3a6cf19e695 ("export: avoid code duplication in include/linux/export.h")
> > Cc: Miroslav Benes <mbenes@suse.cz>
> > Cc: Emil Velikov <emil.l.velikov@gmail.com>
> > Cc: Jessica Yu <jeyu@kernel.org>
> > Cc: Quentin Perret <qperret@google.com>
> > Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
> > Cc: Matthias Maennich <maennich@google.com>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > ---
> > Note, I found this while forward porting an out-of-tree Android kernel
> > patch from 5.4 to 5.10 that used module namespaces to help wall-off vfs
> > symbols from being used by non-filesystem modules.  This issue does not
> > affect any in-kernel code, so I am not so sure if it really is needed
> > here, but it does restore the previous functionality that was being used
> > in older kernels so it might be good to put back in case others want to
> > do much the same thing.
> >
> >  include/linux/export.h | 6 ++++--
> >  1 file changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/include/linux/export.h b/include/linux/export.h
> > index 27d848712b90..9a992809f57d 100644
> > --- a/include/linux/export.h
> > +++ b/include/linux/export.h
> > @@ -162,8 +162,10 @@ struct kernel_symbol {
> >
> >  #define EXPORT_SYMBOL(sym)             _EXPORT_SYMBOL(sym, "")
> >  #define EXPORT_SYMBOL_GPL(sym)         _EXPORT_SYMBOL(sym, "_gpl")
> > -#define EXPORT_SYMBOL_NS(sym, ns)      __EXPORT_SYMBOL(sym, "", #ns)
> > -#define EXPORT_SYMBOL_NS_GPL(sym, ns)  __EXPORT_SYMBOL(sym, "_gpl", #ns)
> > +#define _EXPORT_SYMBOL_NS(sym, ns)     __EXPORT_SYMBOL(sym, "", #ns)
> > +#define _EXPORT_SYMBOL_NS_GPL(sym, ns) __EXPORT_SYMBOL(sym, "_gpl", #ns)
> > +#define EXPORT_SYMBOL_NS(sym, ns)      _EXPORT_SYMBOL_NS(sym, ns)
> > +#define EXPORT_SYMBOL_NS_GPL(sym, ns)  _EXPORT_SYMBOL_NS_GPL(sym, ns)
> >
> >  #endif /* !__ASSEMBLY__ */
> >
> > --
> > 2.34.1
> >
> 
> I see __stringify() a few files above.
> So, you can use it here as well.
> 
> 
> Does the following code work?   (untested)
> 
> 
> 
> 
> 
> diff --git a/include/linux/export.h b/include/linux/export.h
> index 27d848712b90..5910ccb66ca2 100644
> --- a/include/linux/export.h
> +++ b/include/linux/export.h
> @@ -2,6 +2,8 @@
>  #ifndef _LINUX_EXPORT_H
>  #define _LINUX_EXPORT_H
> 
> +#include <linux/stringify.h>
> +
>  /*
>   * Export symbols from the kernel to modules.  Forked from module.h
>   * to reduce the amount of pointless cruft we feed to gcc when only
> @@ -154,7 +156,6 @@ struct kernel_symbol {
>  #endif /* CONFIG_MODULES */
> 
>  #ifdef DEFAULT_SYMBOL_NAMESPACE
> -#include <linux/stringify.h>
>  #define _EXPORT_SYMBOL(sym, sec)       __EXPORT_SYMBOL(sym, sec,
> __stringify(DEFAULT_SYMBOL_NAMESPACE))
>  #else
>  #define _EXPORT_SYMBOL(sym, sec)       __EXPORT_SYMBOL(sym, sec, "")
> @@ -162,8 +163,8 @@ struct kernel_symbol {
> 
>  #define EXPORT_SYMBOL(sym)             _EXPORT_SYMBOL(sym, "")
>  #define EXPORT_SYMBOL_GPL(sym)         _EXPORT_SYMBOL(sym, "_gpl")
> -#define EXPORT_SYMBOL_NS(sym, ns)      __EXPORT_SYMBOL(sym, "", #ns)
> -#define EXPORT_SYMBOL_NS_GPL(sym, ns)  __EXPORT_SYMBOL(sym, "_gpl", #ns)
> +#define EXPORT_SYMBOL_NS(sym, ns)      __EXPORT_SYMBOL(sym, "",
> __stringify(ns))
> +#define EXPORT_SYMBOL_NS_GPL(sym, ns)  __EXPORT_SYMBOL(sym, "_gpl",
> __stringify(ns))
> 
>  #endif /* !__ASSEMBLY__ */

Sorry for the long delay, but yes, this does seem to resolve the issue
for me.  I'll respin this and resend, thanks!

greg k-h

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-04-27  8:42 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-08 14:04 [PATCH] export: fix string handling of namespace in EXPORT_SYMBOL_NS Greg Kroah-Hartman
2022-01-10 17:38 ` Matthias Maennich
2022-01-11 19:14 ` Masahiro Yamada
2022-04-27  8:42   ` Greg Kroah-Hartman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.