Globally warn on VLA use
- Remove unused fallback for BUILD_BUG_ON (which technically contains a VLA) - Lift -Wvla to the top-level Makefile -----BEGIN PGP SIGNATURE----- Comment: Kees Cook <kees@outflux.net> iQJKBAABCgA0FiEEpcP2jyKd1g9yPm4TiXL039xtwCYFAlvV7jMWHGtlZXNjb29r QGNocm9taXVtLm9yZwAKCRCJcvTf3G3AJkUwD/46aPTmVXQqzVr1QxRC087Aou5H hCMaUSG0mSuinhIpB398xh58imTqz48n44gf8yrBgittecV+g8cQ3TJZBp8fSbj4 zyuSy0xlghxqNYhsirMPdN61A8qOS/F7i60XFBXSKpdzKorUUsqlP6paDg1CWslB KWIOr2aHxvQk93pHFsWjOeM7CGqQIq1brKKDPAL+R4zj8EzXfi0s1sOR4tHCXRZP sTsuHysAjsBlaw54tvbCA5SIyABzZK5xsQoeChSKMoCDQb8TOQK4j8f78470/nmk lFWZWGKFr2sPUPcuf1casL5Cp57ycjwi4qTzKX2Qa1hhEhrYTIvcOwzOWdc0AY+6 Fttbopla1QmrGndLtm8FOJRGWiCAzhiSpV9vk1VDaP2jeCc6MEvTC0shsAgxSfsr JRIHqq37w3TBr78qeNuxOaSEkoqtjTVYug2aq7kefG66DGGChzCTVNQrLVNei3Qg ZdamzUZz7FVV6WmXlWsBfbm14sIRd02r7XORm0cJdIVvIwqJ9QIGJigR/Sfc4Qdi pXuuE3TNSfArACXlCkaBfqMYAhWO35qy41TerRlRDkri89DNHPY8RAVV0GpNSp7q kPaPBHZRKXAjHPnnypXz3A/zQoqJ7uWRG5msethAWtEXJBQ4qQWVhjTNmV7tkOkr HIaJFTb03LLIcuv23Q== =Vnw8 -----END PGP SIGNATURE----- Merge tag 'vla-v4.20-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux Pull VLA removal from Kees Cook: "Globally warn on VLA use. This turns on "-Wvla" globally now that the last few trees with their VLA removals have landed (crypto, block, net, and powerpc). Arnd mentioned that there may be a couple more VLAs hiding in hard-to-find randconfigs, but nothing big has shaken out in the last month or so in linux-next. We should be basically VLA-free now! Wheee. :) Summary: - Remove unused fallback for BUILD_BUG_ON (which technically contains a VLA) - Lift -Wvla to the top-level Makefile" * tag 'vla-v4.20-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux: Makefile: Globally enable VLA warning compiler.h: give up __compiletime_assert_fallback()
This commit is contained in:
Коммит
746bb4ed6d
3
Makefile
3
Makefile
|
@ -801,6 +801,9 @@ NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
|
||||||
# warn about C99 declaration after statement
|
# warn about C99 declaration after statement
|
||||||
KBUILD_CFLAGS += -Wdeclaration-after-statement
|
KBUILD_CFLAGS += -Wdeclaration-after-statement
|
||||||
|
|
||||||
|
# Variable Length Arrays (VLAs) should not be used anywhere in the kernel
|
||||||
|
KBUILD_CFLAGS += $(call cc-option,-Wvla)
|
||||||
|
|
||||||
# disable pointer signed / unsigned warnings in gcc 4.0
|
# disable pointer signed / unsigned warnings in gcc 4.0
|
||||||
KBUILD_CFLAGS += -Wno-pointer-sign
|
KBUILD_CFLAGS += -Wno-pointer-sign
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
# Note the danger in using -Wall -Wextra is that when CI updates gcc we
|
# Note the danger in using -Wall -Wextra is that when CI updates gcc we
|
||||||
# will most likely get a sudden build breakage... Hopefully we will fix
|
# will most likely get a sudden build breakage... Hopefully we will fix
|
||||||
# new warnings before CI updates!
|
# new warnings before CI updates!
|
||||||
subdir-ccflags-y := -Wall -Wextra -Wvla
|
subdir-ccflags-y := -Wall -Wextra
|
||||||
subdir-ccflags-y += $(call cc-disable-warning, unused-parameter)
|
subdir-ccflags-y += $(call cc-disable-warning, unused-parameter)
|
||||||
subdir-ccflags-y += $(call cc-disable-warning, type-limits)
|
subdir-ccflags-y += $(call cc-disable-warning, type-limits)
|
||||||
subdir-ccflags-y += $(call cc-disable-warning, missing-field-initializers)
|
subdir-ccflags-y += $(call cc-disable-warning, missing-field-initializers)
|
||||||
|
|
|
@ -344,29 +344,14 @@ static inline void *offset_to_ptr(const int *off)
|
||||||
#endif
|
#endif
|
||||||
#ifndef __compiletime_error
|
#ifndef __compiletime_error
|
||||||
# define __compiletime_error(message)
|
# define __compiletime_error(message)
|
||||||
/*
|
|
||||||
* Sparse complains of variable sized arrays due to the temporary variable in
|
|
||||||
* __compiletime_assert. Unfortunately we can't just expand it out to make
|
|
||||||
* sparse see a constant array size without breaking compiletime_assert on old
|
|
||||||
* versions of GCC (e.g. 4.2.4), so hide the array from sparse altogether.
|
|
||||||
*/
|
|
||||||
# ifndef __CHECKER__
|
|
||||||
# define __compiletime_error_fallback(condition) \
|
|
||||||
do { ((void)sizeof(char[1 - 2 * condition])); } while (0)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#ifndef __compiletime_error_fallback
|
|
||||||
# define __compiletime_error_fallback(condition) do { } while (0)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __OPTIMIZE__
|
#ifdef __OPTIMIZE__
|
||||||
# define __compiletime_assert(condition, msg, prefix, suffix) \
|
# define __compiletime_assert(condition, msg, prefix, suffix) \
|
||||||
do { \
|
do { \
|
||||||
int __cond = !(condition); \
|
|
||||||
extern void prefix ## suffix(void) __compiletime_error(msg); \
|
extern void prefix ## suffix(void) __compiletime_error(msg); \
|
||||||
if (__cond) \
|
if (!(condition)) \
|
||||||
prefix ## suffix(); \
|
prefix ## suffix(); \
|
||||||
__compiletime_error_fallback(__cond); \
|
|
||||||
} while (0)
|
} while (0)
|
||||||
#else
|
#else
|
||||||
# define __compiletime_assert(condition, msg, prefix, suffix) do { } while (0)
|
# define __compiletime_assert(condition, msg, prefix, suffix) do { } while (0)
|
||||||
|
|
|
@ -53,7 +53,9 @@ obj-$(CONFIG_TEST_HASH) += test_hash.o test_siphash.o
|
||||||
obj-$(CONFIG_TEST_IDA) += test_ida.o
|
obj-$(CONFIG_TEST_IDA) += test_ida.o
|
||||||
obj-$(CONFIG_TEST_KASAN) += test_kasan.o
|
obj-$(CONFIG_TEST_KASAN) += test_kasan.o
|
||||||
CFLAGS_test_kasan.o += -fno-builtin
|
CFLAGS_test_kasan.o += -fno-builtin
|
||||||
|
CFLAGS_test_kasan.o += $(call cc-disable-warning, vla)
|
||||||
obj-$(CONFIG_TEST_UBSAN) += test_ubsan.o
|
obj-$(CONFIG_TEST_UBSAN) += test_ubsan.o
|
||||||
|
CFLAGS_test_ubsan.o += $(call cc-disable-warning, vla)
|
||||||
UBSAN_SANITIZE_test_ubsan.o := y
|
UBSAN_SANITIZE_test_ubsan.o := y
|
||||||
obj-$(CONFIG_TEST_KSTRTOX) += test-kstrtox.o
|
obj-$(CONFIG_TEST_KSTRTOX) += test-kstrtox.o
|
||||||
obj-$(CONFIG_TEST_LIST_SORT) += test_list_sort.o
|
obj-$(CONFIG_TEST_LIST_SORT) += test_list_sort.o
|
||||||
|
|
|
@ -52,7 +52,6 @@ warning-3 += -Wpointer-arith
|
||||||
warning-3 += -Wredundant-decls
|
warning-3 += -Wredundant-decls
|
||||||
warning-3 += -Wswitch-default
|
warning-3 += -Wswitch-default
|
||||||
warning-3 += $(call cc-option, -Wpacked-bitfield-compat)
|
warning-3 += $(call cc-option, -Wpacked-bitfield-compat)
|
||||||
warning-3 += $(call cc-option, -Wvla)
|
|
||||||
|
|
||||||
warning := $(warning-$(findstring 1, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
|
warning := $(warning-$(findstring 1, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
|
||||||
warning += $(warning-$(findstring 2, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
|
warning += $(warning-$(findstring 2, $(KBUILD_ENABLE_EXTRA_GCC_CHECKS)))
|
||||||
|
|
Загрузка…
Ссылка в новой задаче