Skip to content

Commit f0be87c

Browse files
committed
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 <[email protected]> Cc: Nathan Chancellor <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 842c3b3 commit f0be87c

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
@@ -788,6 +788,7 @@ stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG) := -fstack-protector-strong
788788
KBUILD_CFLAGS += $(stackp-flags-y)
789789

790790
KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror
791+
KBUILD_CFLAGS-$(CONFIG_CC_NO_ARRAY_BOUNDS) += -Wno-array-bounds
791792
KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
792793

793794
ifdef CONFIG_CC_IS_CLANG

arch/s390/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ config S390
125125
select CLONE_BACKWARDS2
126126
select DMA_OPS if PCI
127127
select DYNAMIC_FTRACE if FUNCTION_TRACER
128+
select GCC12_NO_ARRAY_BOUNDS
128129
select GENERIC_ALLOCATOR
129130
select GENERIC_CPU_AUTOPROBE
130131
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
@@ -885,6 +885,15 @@ config CC_IMPLICIT_FALLTHROUGH
885885
default "-Wimplicit-fallthrough=5" if CC_IS_GCC && $(cc-option,-Wimplicit-fallthrough=5)
886886
default "-Wimplicit-fallthrough" if CC_IS_CLANG && $(cc-option,-Wunreachable-code-fallthrough)
887887

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

0 commit comments

Comments
 (0)