Re: [PATCH v3] vmlinux.lds.h: Define SANTIZER_DISCARDS with CONFIG_GCOV_KERNEL=y

2021-02-25 Thread Kees Cook
On Fri, 29 Jan 2021 17:46:51 -0700, Nathan Chancellor wrote:
> clang produces .eh_frame sections when CONFIG_GCOV_KERNEL is enabled,
> even when -fno-asynchronous-unwind-tables is in KBUILD_CFLAGS:
> 
> $ make CC=clang vmlinux
> ...
> ld: warning: orphan section `.eh_frame' from `init/main.o' being placed in 
> section `.eh_frame'
> ld: warning: orphan section `.eh_frame' from `init/version.o' being placed in 
> section `.eh_frame'
> ld: warning: orphan section `.eh_frame' from `init/do_mounts.o' being placed 
> in section `.eh_frame'
> ld: warning: orphan section `.eh_frame' from `init/do_mounts_initrd.o' being 
> placed in section `.eh_frame'
> ld: warning: orphan section `.eh_frame' from `init/initramfs.o' being placed 
> in section `.eh_frame'
> ld: warning: orphan section `.eh_frame' from `init/calibrate.o' being placed 
> in section `.eh_frame'
> ld: warning: orphan section `.eh_frame' from `init/init_task.o' being placed 
> in section `.eh_frame'
> ...
> 
> [...]

Applied to kspp/linker/orphans, thanks!

[1/1] vmlinux.lds.h: Define SANTIZER_DISCARDS with CONFIG_GCOV_KERNEL=y
  https://git.kernel.org/kees/c/f5b6a74d9c08

-- 
Kees Cook



Re: [PATCH v3] vmlinux.lds.h: Define SANTIZER_DISCARDS with CONFIG_GCOV_KERNEL=y

2021-02-25 Thread Nathan Chancellor
On Fri, Jan 29, 2021 at 05:46:51PM -0700, Nathan Chancellor wrote:
> clang produces .eh_frame sections when CONFIG_GCOV_KERNEL is enabled,
> even when -fno-asynchronous-unwind-tables is in KBUILD_CFLAGS:
> 
> $ make CC=clang vmlinux
> ...
> ld: warning: orphan section `.eh_frame' from `init/main.o' being placed in 
> section `.eh_frame'
> ld: warning: orphan section `.eh_frame' from `init/version.o' being placed in 
> section `.eh_frame'
> ld: warning: orphan section `.eh_frame' from `init/do_mounts.o' being placed 
> in section `.eh_frame'
> ld: warning: orphan section `.eh_frame' from `init/do_mounts_initrd.o' being 
> placed in section `.eh_frame'
> ld: warning: orphan section `.eh_frame' from `init/initramfs.o' being placed 
> in section `.eh_frame'
> ld: warning: orphan section `.eh_frame' from `init/calibrate.o' being placed 
> in section `.eh_frame'
> ld: warning: orphan section `.eh_frame' from `init/init_task.o' being placed 
> in section `.eh_frame'
> ...
> 
> $ rg "GCOV_KERNEL|GCOV_PROFILE_ALL" .config
> CONFIG_GCOV_KERNEL=y
> CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
> CONFIG_GCOV_PROFILE_ALL=y
> 
> This was already handled for a couple of other options in
> commit d812db78288d ("vmlinux.lds.h: Avoid KASAN and KCSAN's unwanted
> sections") and there is an open LLVM bug for this issue. Take advantage
> of that section for this config as well so that there are no more orphan
> warnings.
> 
> Link: https://bugs.llvm.org/show_bug.cgi?id=46478
> Link: https://github.com/ClangBuiltLinux/linux/issues/1069
> Reported-by: kernel test robot 
> Reviewed-by: Fangrui Song 
> Reviewed-by: Nick Desaulniers 
> Signed-off-by: Nathan Chancellor 
> ---
> 
> v2 -> v3:
> 
> * Fix double "unwanted" in comment section per Sedat.
> 
> v1 -> v2:
> 
> * Keep configs and flag names alphabetized.
> 
> * Drop mention of -ftest-coverage since it does not cause this issue per
>   Fangrui.
> 
> * Pick up review tags from Fangrui and Nick.
> 
>  include/asm-generic/vmlinux.lds.h | 9 +
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/include/asm-generic/vmlinux.lds.h 
> b/include/asm-generic/vmlinux.lds.h
> index b2b3d81b1535..b61b537177fb 100644
> --- a/include/asm-generic/vmlinux.lds.h
> +++ b/include/asm-generic/vmlinux.lds.h
> @@ -988,12 +988,13 @@
>  #endif
>  
>  /*
> - * Clang's -fsanitize=kernel-address and -fsanitize=thread produce
> - * unwanted sections (.eh_frame and .init_array.*), but
> - * CONFIG_CONSTRUCTORS wants to keep any .init_array.* sections.
> + * Clang's -fprofile-arcs, -fsanitize=kernel-address, and
> + * -fsanitize=thread produce unwanted sections (.eh_frame
> + * and .init_array.*), but CONFIG_CONSTRUCTORS wants to
> + * keep any .init_array.* sections.
>   * https://bugs.llvm.org/show_bug.cgi?id=46478
>   */
> -#if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KCSAN)
> +#if defined(CONFIG_GCOV_KERNEL) || defined(CONFIG_KASAN_GENERIC) || 
> defined(CONFIG_KCSAN)
>  # ifdef CONFIG_CONSTRUCTORS
>  #  define SANITIZER_DISCARDS \
>   *(.eh_frame)
> 
> base-commit: bec4c2968fce2f44ce62d05288a633cd99a722eb
> -- 
> 2.30.0
> 

Andrew, Arnd, or Kees:

Would one of you be able to pick this up and get it to Linus? I think
the 0day bot just tripped over this again:

https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org/message/BXBY7OPVMOCCUZSCFEZXI7RG65RJWJ52/
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org/message/QF62LWM6YSNWWNOM7AXYK4734AKH2SVT/

Cheers,
Nathan


[PATCH v3] vmlinux.lds.h: Define SANTIZER_DISCARDS with CONFIG_GCOV_KERNEL=y

2021-01-29 Thread Nathan Chancellor
clang produces .eh_frame sections when CONFIG_GCOV_KERNEL is enabled,
even when -fno-asynchronous-unwind-tables is in KBUILD_CFLAGS:

$ make CC=clang vmlinux
...
ld: warning: orphan section `.eh_frame' from `init/main.o' being placed in 
section `.eh_frame'
ld: warning: orphan section `.eh_frame' from `init/version.o' being placed in 
section `.eh_frame'
ld: warning: orphan section `.eh_frame' from `init/do_mounts.o' being placed in 
section `.eh_frame'
ld: warning: orphan section `.eh_frame' from `init/do_mounts_initrd.o' being 
placed in section `.eh_frame'
ld: warning: orphan section `.eh_frame' from `init/initramfs.o' being placed in 
section `.eh_frame'
ld: warning: orphan section `.eh_frame' from `init/calibrate.o' being placed in 
section `.eh_frame'
ld: warning: orphan section `.eh_frame' from `init/init_task.o' being placed in 
section `.eh_frame'
...

$ rg "GCOV_KERNEL|GCOV_PROFILE_ALL" .config
CONFIG_GCOV_KERNEL=y
CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
CONFIG_GCOV_PROFILE_ALL=y

This was already handled for a couple of other options in
commit d812db78288d ("vmlinux.lds.h: Avoid KASAN and KCSAN's unwanted
sections") and there is an open LLVM bug for this issue. Take advantage
of that section for this config as well so that there are no more orphan
warnings.

Link: https://bugs.llvm.org/show_bug.cgi?id=46478
Link: https://github.com/ClangBuiltLinux/linux/issues/1069
Reported-by: kernel test robot 
Reviewed-by: Fangrui Song 
Reviewed-by: Nick Desaulniers 
Signed-off-by: Nathan Chancellor 
---

v2 -> v3:

* Fix double "unwanted" in comment section per Sedat.

v1 -> v2:

* Keep configs and flag names alphabetized.

* Drop mention of -ftest-coverage since it does not cause this issue per
  Fangrui.

* Pick up review tags from Fangrui and Nick.

 include/asm-generic/vmlinux.lds.h | 9 +
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/include/asm-generic/vmlinux.lds.h 
b/include/asm-generic/vmlinux.lds.h
index b2b3d81b1535..b61b537177fb 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -988,12 +988,13 @@
 #endif
 
 /*
- * Clang's -fsanitize=kernel-address and -fsanitize=thread produce
- * unwanted sections (.eh_frame and .init_array.*), but
- * CONFIG_CONSTRUCTORS wants to keep any .init_array.* sections.
+ * Clang's -fprofile-arcs, -fsanitize=kernel-address, and
+ * -fsanitize=thread produce unwanted sections (.eh_frame
+ * and .init_array.*), but CONFIG_CONSTRUCTORS wants to
+ * keep any .init_array.* sections.
  * https://bugs.llvm.org/show_bug.cgi?id=46478
  */
-#if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KCSAN)
+#if defined(CONFIG_GCOV_KERNEL) || defined(CONFIG_KASAN_GENERIC) || 
defined(CONFIG_KCSAN)
 # ifdef CONFIG_CONSTRUCTORS
 #  define SANITIZER_DISCARDS   \
*(.eh_frame)

base-commit: bec4c2968fce2f44ce62d05288a633cd99a722eb
-- 
2.30.0