2023-02-15 09:15:22

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH] kcsan: select CONFIG_CONSTRUCTORS

From: Arnd Bergmann <[email protected]>

Building a kcsan enabled kernel for x86_64 with gcc-11 results in a lot
of build warnings or errors without CONFIG_CONSTRUCTORS:

x86_64-linux-ld: error: unplaced orphan section `.ctors.65436' from `arch/x86/lib/copy_mc.o'
x86_64-linux-ld: error: unplaced orphan section `.ctors.65436' from `arch/x86/lib/cpu.o'
x86_64-linux-ld: error: unplaced orphan section `.ctors.65436' from `arch/x86/lib/csum-partial_64.o'
x86_64-linux-ld: error: unplaced orphan section `.ctors.65436' from `arch/x86/lib/csum-wrappers_64.o'
x86_64-linux-ld: error: unplaced orphan section `.ctors.65436' from `arch/x86/lib/insn-eval.o'
x86_64-linux-ld: error: unplaced orphan section `.ctors.65436' from `arch/x86/lib/insn.o'
x86_64-linux-ld: error: unplaced orphan section `.ctors.65436' from `arch/x86/lib/misc.o'

The same thing has been reported for mips64. I can't reproduce it for
any other compiler version, so I don't know if constructors are always
required here or if this is a gcc-11 specific implementation detail.

I see no harm in always enabling constructors here, and this reliably
fixes the build warnings for me.

Link: https://lore.kernel.org/lkml/[email protected]/T/
Cc: Kees Cook <[email protected]>
See-also: 3e6631485fae ("vmlinux.lds.h: Keep .ctors.* with .ctors")
Signed-off-by: Arnd Bergmann <[email protected]>
---
lib/Kconfig.kcsan | 1 +
1 file changed, 1 insertion(+)

diff --git a/lib/Kconfig.kcsan b/lib/Kconfig.kcsan
index 4dedd61e5192..609ddfc73de5 100644
--- a/lib/Kconfig.kcsan
+++ b/lib/Kconfig.kcsan
@@ -14,6 +14,7 @@ menuconfig KCSAN
bool "KCSAN: dynamic data race detector"
depends on HAVE_ARCH_KCSAN && HAVE_KCSAN_COMPILER
depends on DEBUG_KERNEL && !KASAN
+ select CONSTRUCTORS
select STACKTRACE
help
The Kernel Concurrency Sanitizer (KCSAN) is a dynamic
--
2.39.1



2023-02-15 09:27:15

by Marco Elver

[permalink] [raw]
Subject: Re: [PATCH] kcsan: select CONFIG_CONSTRUCTORS

On Wed, 15 Feb 2023 at 10:15, Arnd Bergmann <[email protected]> wrote:
>
> From: Arnd Bergmann <[email protected]>
>
> Building a kcsan enabled kernel for x86_64 with gcc-11 results in a lot
> of build warnings or errors without CONFIG_CONSTRUCTORS:
>
> x86_64-linux-ld: error: unplaced orphan section `.ctors.65436' from `arch/x86/lib/copy_mc.o'
> x86_64-linux-ld: error: unplaced orphan section `.ctors.65436' from `arch/x86/lib/cpu.o'
> x86_64-linux-ld: error: unplaced orphan section `.ctors.65436' from `arch/x86/lib/csum-partial_64.o'
> x86_64-linux-ld: error: unplaced orphan section `.ctors.65436' from `arch/x86/lib/csum-wrappers_64.o'
> x86_64-linux-ld: error: unplaced orphan section `.ctors.65436' from `arch/x86/lib/insn-eval.o'
> x86_64-linux-ld: error: unplaced orphan section `.ctors.65436' from `arch/x86/lib/insn.o'
> x86_64-linux-ld: error: unplaced orphan section `.ctors.65436' from `arch/x86/lib/misc.o'
>
> The same thing has been reported for mips64. I can't reproduce it for
> any other compiler version, so I don't know if constructors are always
> required here or if this is a gcc-11 specific implementation detail.
>
> I see no harm in always enabling constructors here, and this reliably
> fixes the build warnings for me.
>
> Link: https://lore.kernel.org/lkml/[email protected]/T/
> Cc: Kees Cook <[email protected]>
> See-also: 3e6631485fae ("vmlinux.lds.h: Keep .ctors.* with .ctors")
> Signed-off-by: Arnd Bergmann <[email protected]>

Reviewed-by: Marco Elver <[email protected]>

Looks like KASAN does select CONSTRUCTORS already, so KCSAN should as well.

Do you have a tree to take this through, or should it go through -rcu
as usual for KCSAN patches?

Thanks,
-- Marco

> ---
> lib/Kconfig.kcsan | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/lib/Kconfig.kcsan b/lib/Kconfig.kcsan
> index 4dedd61e5192..609ddfc73de5 100644
> --- a/lib/Kconfig.kcsan
> +++ b/lib/Kconfig.kcsan
> @@ -14,6 +14,7 @@ menuconfig KCSAN
> bool "KCSAN: dynamic data race detector"
> depends on HAVE_ARCH_KCSAN && HAVE_KCSAN_COMPILER
> depends on DEBUG_KERNEL && !KASAN
> + select CONSTRUCTORS
> select STACKTRACE
> help
> The Kernel Concurrency Sanitizer (KCSAN) is a dynamic
> --
> 2.39.1
>

2023-02-15 09:48:58

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH] kcsan: select CONFIG_CONSTRUCTORS

On Wed, Feb 15, 2023, at 10:25, Marco Elver wrote:
> On Wed, 15 Feb 2023 at 10:15, Arnd Bergmann <[email protected]> wrote:

> Looks like KASAN does select CONSTRUCTORS already, so KCSAN should as well.
>
> Do you have a tree to take this through, or should it go through -rcu
> as usual for KCSAN patches?

I don't have a tree for taking these build fixes, so it would be good if you could forward it as appropriate.

Thanks,

Arnd

2023-02-15 22:42:29

by Paul E. McKenney

[permalink] [raw]
Subject: Re: [PATCH] kcsan: select CONFIG_CONSTRUCTORS

On Wed, Feb 15, 2023 at 10:48:11AM +0100, Arnd Bergmann wrote:
> On Wed, Feb 15, 2023, at 10:25, Marco Elver wrote:
> > On Wed, 15 Feb 2023 at 10:15, Arnd Bergmann <[email protected]> wrote:
>
> > Looks like KASAN does select CONSTRUCTORS already, so KCSAN should as well.
> >
> > Do you have a tree to take this through, or should it go through -rcu
> > as usual for KCSAN patches?
>
> I don't have a tree for taking these build fixes, so it would be good if you could forward it as appropriate.

Queued and pushed, thank you both!

Is this ready for the upcoming merge window, or would you rather that
I hold off until the v6.4 merge window? (I am tempted to treat this
as a bug fix, thus sending it earlier rather than later, but figured I
should ask.)

Thanx, Paul

2023-02-16 07:01:16

by Marco Elver

[permalink] [raw]
Subject: Re: [PATCH] kcsan: select CONFIG_CONSTRUCTORS

On Wed, 15 Feb 2023 at 23:42, Paul E. McKenney <[email protected]> wrote:
>
> On Wed, Feb 15, 2023 at 10:48:11AM +0100, Arnd Bergmann wrote:
> > On Wed, Feb 15, 2023, at 10:25, Marco Elver wrote:
> > > On Wed, 15 Feb 2023 at 10:15, Arnd Bergmann <[email protected]> wrote:
> >
> > > Looks like KASAN does select CONSTRUCTORS already, so KCSAN should as well.
> > >
> > > Do you have a tree to take this through, or should it go through -rcu
> > > as usual for KCSAN patches?
> >
> > I don't have a tree for taking these build fixes, so it would be good if you could forward it as appropriate.
>
> Queued and pushed, thank you both!
>
> Is this ready for the upcoming merge window, or would you rather that
> I hold off until the v6.4 merge window? (I am tempted to treat this
> as a bug fix, thus sending it earlier rather than later, but figured I
> should ask.)

I'd consider it a bug fix. If it survives the usual -next exposure, no
harm in sending it as a fix.

Thanks,
-- Marco

2023-02-16 18:36:38

by Paul E. McKenney

[permalink] [raw]
Subject: Re: [PATCH] kcsan: select CONFIG_CONSTRUCTORS

On Thu, Feb 16, 2023 at 08:00:00AM +0100, Marco Elver wrote:
> On Wed, 15 Feb 2023 at 23:42, Paul E. McKenney <[email protected]> wrote:
> >
> > On Wed, Feb 15, 2023 at 10:48:11AM +0100, Arnd Bergmann wrote:
> > > On Wed, Feb 15, 2023, at 10:25, Marco Elver wrote:
> > > > On Wed, 15 Feb 2023 at 10:15, Arnd Bergmann <[email protected]> wrote:
> > >
> > > > Looks like KASAN does select CONSTRUCTORS already, so KCSAN should as well.
> > > >
> > > > Do you have a tree to take this through, or should it go through -rcu
> > > > as usual for KCSAN patches?
> > >
> > > I don't have a tree for taking these build fixes, so it would be good if you could forward it as appropriate.
> >
> > Queued and pushed, thank you both!
> >
> > Is this ready for the upcoming merge window, or would you rather that
> > I hold off until the v6.4 merge window? (I am tempted to treat this
> > as a bug fix, thus sending it earlier rather than later, but figured I
> > should ask.)
>
> I'd consider it a bug fix. If it survives the usual -next exposure, no
> harm in sending it as a fix.

It passed overnight tests, so I have sent it along to -next. If there
are no issues, I will push it by the end of this coming week (which is
the first weke of the merge window).

Thanx, Paul