Skip to content

Commit a7d2e9f

Browse files
committed
gcc-12: disable '-Warray-bounds' universally for now
Bugzilla: https://bugzilla.redhat.com/2159468 commit f0be87c Author: Linus Torvalds <torvalds@linux-foundation.org> Date: Thu Jun 9 10:11:12 2022 -0700 gcc-12: disable '-Warray-bounds' universally for now In commit 8b202ee ("s390: disable -Warray-bounds") the s390 people disabled the '-Warray-bounds' warning for gcc-12, because the new logic in gcc would cause warnings for their use of the S390_lowcore macro, which accesses absolute pointers. It turns out gcc-12 has many other issues in this area, so this takes that s390 warning disable logic, and turns it into a kernel build config entry instead. Part of the intent is that we can make this all much more targeted, and use this conflig flag to disable it in only particular configurations that cause problems, with the s390 case as an example: select GCC12_NO_ARRAY_BOUNDS and we could do that for other configuration cases that cause issues. Or we could possibly use the CONFIG_CC_NO_ARRAY_BOUNDS thing in a more targeted way, and disable the warning only for particular uses: again the s390 case as an example: KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_CC_NO_ARRAY_BOUNDS),-Wno-array-bounds) but this ends up just doing it globally in the top-level Makefile, since the current issues are spread fairly widely all over: KBUILD_CFLAGS-$(CONFIG_CC_NO_ARRAY_BOUNDS) += -Wno-array-bounds We'll try to limit this later, since the gcc-12 problems are rare enough that *much* of the kernel can be built with it without disabling this warning. Cc: Kees Cook <keescook@chromium.org> Cc: Nathan Chancellor <nathan@kernel.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Eric Chanudet <echanude@redhat.com>
1 parent 7b9addc commit a7d2e9f

File tree

4 files changed

+12
-9
lines changed

4 files changed

+12
-9
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -809,6 +809,7 @@ stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG) := -fstack-protector-strong
809809
KBUILD_CFLAGS += $(stackp-flags-y)
810810

811811
KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror
812+
KBUILD_CFLAGS-$(CONFIG_CC_NO_ARRAY_BOUNDS) += -Wno-array-bounds
812813
KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
813814

814815
ifdef CONFIG_CC_IS_CLANG

arch/s390/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ config S390
124124
select CPU_NO_EFFICIENT_FFS if !HAVE_MARCH_Z9_109_FEATURES
125125
select DMA_OPS if PCI
126126
select DYNAMIC_FTRACE if FUNCTION_TRACER
127+
select GCC12_NO_ARRAY_BOUNDS
127128
select GENERIC_ALLOCATOR
128129
select GENERIC_CPU_AUTOPROBE
129130
select GENERIC_CPU_VULNERABILITIES

arch/s390/Makefile

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,7 @@ KBUILD_CFLAGS_DECOMPRESSOR += -fno-stack-protector
3232
KBUILD_CFLAGS_DECOMPRESSOR += $(call cc-disable-warning, address-of-packed-member)
3333
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
3434
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
35-
36-
ifdef CONFIG_CC_IS_GCC
37-
ifeq ($(call cc-ifversion, -ge, 1200, y), y)
38-
ifeq ($(call cc-ifversion, -lt, 1300, y), y)
39-
KBUILD_CFLAGS += $(call cc-disable-warning, array-bounds)
40-
KBUILD_CFLAGS_DECOMPRESSOR += $(call cc-disable-warning, array-bounds)
41-
endif
42-
endif
43-
endif
35+
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_CC_NO_ARRAY_BOUNDS),-Wno-array-bounds)
4436

4537
UTS_MACHINE := s390x
4638
STACK_SIZE := $(if $(CONFIG_KASAN),65536,16384)

init/Kconfig

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -882,6 +882,15 @@ config CC_IMPLICIT_FALLTHROUGH
882882
default "-Wimplicit-fallthrough=5" if CC_IS_GCC && $(cc-option,-Wimplicit-fallthrough=5)
883883
default "-Wimplicit-fallthrough" if CC_IS_CLANG && $(cc-option,-Wunreachable-code-fallthrough)
884884

885+
# Currently, disable gcc-12 array-bounds globally.
886+
# We may want to target only particular configurations some day.
887+
config GCC12_NO_ARRAY_BOUNDS
888+
def_bool y
889+
890+
config CC_NO_ARRAY_BOUNDS
891+
bool
892+
default y if CC_IS_GCC && GCC_VERSION >= 120000 && GCC_VERSION < 130000 && GCC12_NO_ARRAY_BOUNDS
893+
885894
#
886895
# For architectures that know their GCC __int128 support is sound
887896
#

0 commit comments

Comments
 (0)