Merge tag 'var-init-v5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 4 Aug 2020 20:38:35 +0000 (13:38 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 4 Aug 2020 20:38:35 +0000 (13:38 -0700)
Pull automatic variable initialization updates from Kees Cook:
 "This adds the "zero" init option from Clang, which is being used
  widely in production builds of Android and Chrome OS (though it also
  keeps the "pattern" init, which is better for debug builds).

   - Introduce CONFIG_INIT_STACK_ALL_ZERO (Alexander Potapenko)"

* tag 'var-init-v5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
  security: allow using Clang's zero initialization for stack variables

1  2 
Makefile

diff --combined Makefile
+++ b/Makefile
@@@ -2,7 -2,7 +2,7 @@@
  VERSION = 5
  PATCHLEVEL = 8
  SUBLEVEL = 0
 -EXTRAVERSION = -rc1
 +EXTRAVERSION =
  NAME = Kleptomaniac Octopus
  
  # *DOCUMENTATION*
@@@ -464,7 -464,6 +464,7 @@@ KLZOP              = lzo
  LZMA          = lzma
  LZ4           = lz4c
  XZ            = xz
 +ZSTD          = zstd
  
  CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
                  -Wbitwise -Wno-return-void -Wno-unknown-attribute $(CF)
@@@ -513,7 -512,7 +513,7 @@@ CLANG_FLAGS :
  export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC
  export CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE READELF PAHOLE LEX YACC AWK INSTALLKERNEL
  export PERL PYTHON PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
 -export KGZIP KBZIP2 KLZOP LZMA LZ4 XZ
 +export KGZIP KBZIP2 KLZOP LZMA LZ4 XZ ZSTD
  export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE
  
  export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
@@@ -568,7 -567,7 +568,7 @@@ ifneq ($(shell $(CC) --version 2>&1 | h
  ifneq ($(CROSS_COMPILE),)
  CLANG_FLAGS   += --target=$(notdir $(CROSS_COMPILE:%-=%))
  GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
 -CLANG_FLAGS   += --prefix=$(GCC_TOOLCHAIN_DIR)
 +CLANG_FLAGS   += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
  GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..)
  endif
  ifneq ($(GCC_TOOLCHAIN),)
@@@ -803,11 -802,20 +803,20 @@@ KBUILD_CFLAGS   += -fomit-frame-pointe
  endif
  endif
  
- # Initialize all stack variables with a pattern, if desired.
- ifdef CONFIG_INIT_STACK_ALL
+ # Initialize all stack variables with a 0xAA pattern.
+ ifdef CONFIG_INIT_STACK_ALL_PATTERN
  KBUILD_CFLAGS += -ftrivial-auto-var-init=pattern
  endif
  
+ # Initialize all stack variables with a zero value.
+ ifdef CONFIG_INIT_STACK_ALL_ZERO
+ # Future support for zero initialization is still being debated, see
+ # https://bugs.llvm.org/show_bug.cgi?id=45497. These flags are subject to being
+ # renamed or dropped.
+ KBUILD_CFLAGS += -ftrivial-auto-var-init=zero
+ KBUILD_CFLAGS += -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
+ endif
  DEBUG_CFLAGS  := $(call cc-option, -fno-var-tracking-assignments)
  
  ifdef CONFIG_DEBUG_INFO
@@@ -829,7 -837,7 +838,7 @@@ endi
  
  ifdef CONFIG_DEBUG_INFO_COMPRESSED
  DEBUG_CFLAGS  += -gz=zlib
 -KBUILD_AFLAGS += -Wa,--compress-debug-sections=zlib
 +KBUILD_AFLAGS += -gz=zlib
  KBUILD_LDFLAGS        += --compress-debug-sections=zlib
  endif
  
@@@ -971,8 -979,8 +980,8 @@@ LDFLAGS_vmlinux    += --pack-dyn-relocs=re
  endif
  
  # Align the bit size of userspace programs with the kernel
 -KBUILD_USERCFLAGS  += $(filter -m32 -m64, $(KBUILD_CFLAGS))
 -KBUILD_USERLDFLAGS += $(filter -m32 -m64, $(KBUILD_CFLAGS))
 +KBUILD_USERCFLAGS  += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
 +KBUILD_USERLDFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
  
  # make the checker run with the right architecture
  CHECKFLAGS += --arch=$(ARCH)
@@@ -1337,6 -1345,16 +1346,6 @@@ dt_binding_check: scripts_dt
  # ---------------------------------------------------------------------------
  # Modules
  
 -# install modules.builtin regardless of CONFIG_MODULES
 -PHONY += _builtin_inst_
 -_builtin_inst_:
 -      @mkdir -p $(MODLIB)/
 -      @cp -f modules.builtin $(MODLIB)/
 -      @cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
 -
 -PHONY += install
 -install: _builtin_inst_
 -
  ifdef CONFIG_MODULES
  
  # By default, build modules as well
@@@ -1380,7 -1398,7 +1389,7 @@@ PHONY += modules_instal
  modules_install: _modinst_ _modinst_post
  
  PHONY += _modinst_
 -_modinst_: _builtin_inst_
 +_modinst_:
        @rm -rf $(MODLIB)/kernel
        @rm -f $(MODLIB)/source
        @mkdir -p $(MODLIB)/kernel
                ln -s $(CURDIR) $(MODLIB)/build ; \
        fi
        @sed 's:^:kernel/:' modules.order > $(MODLIB)/modules.order
 +      @cp -f modules.builtin $(MODLIB)/
 +      @cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
  
  # This depmod is only for convenience to give the initial
@@@ -1755,7 -1771,7 +1764,7 @@@ PHONY += descend $(build-dirs
  descend: $(build-dirs)
  $(build-dirs): prepare
        $(Q)$(MAKE) $(build)=$@ \
 -      single-build=$(if $(filter-out $@/, $(filter $@/%, $(single-no-ko))),1) \
 +      single-build=$(if $(filter-out $@/, $(filter $@/%, $(KBUILD_SINGLE_TARGETS))),1) \
        need-builtin=1 need-modorder=1
  
  clean-dirs := $(addprefix _clean_, $(clean-dirs))