Kees Cook
81a56f6dcd
gcc-plugins: structleak: Generalize to all variable types
...
This adjusts structleak to also work with non-struct types when they
are passed by reference, since those variables may leak just like
anything else. This is exposed via an improved set of Kconfig options.
(This does mean structleak is slightly misnamed now.)
Building with CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL should give the
kernel complete initialization coverage of all stack variables passed
by reference, including padding (see lib/test_stackinit.c).
Using CONFIG_GCC_PLUGIN_STRUCTLEAK_VERBOSE to count added initializations
under defconfig:
..._BYREF: 5945 added initializations
..._BYREF_ALL: 16606 added initializations
There is virtually no change to text+data size (both have less than 0.05%
growth):
text data bss dec hex filename
19502103 5051456 1917000 26470559 193e89f vmlinux.stock
19513412 5051456 1908808 26473676 193f4cc vmlinux.byref
19516974 5047360 1900616 26464950 193d2b6 vmlinux.byref_all
The measured performance difference is in the noise for hackbench and
kernel build benchmarks:
Stock:
5x hackbench -g 20 -l 1000
Mean: 10.649s
Std Dev: 0.339
5x kernel build (4-way parallel)
Mean: 261.98s
Std Dev: 1.53
CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF:
5x hackbench -g 20 -l 1000
Mean: 10.540s
Std Dev: 0.233
5x kernel build (4-way parallel)
Mean: 260.52s
Std Dev: 1.31
CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL:
5x hackbench -g 20 -l 1000
Mean: 10.320
Std Dev: 0.413
5x kernel build (4-way parallel)
Mean: 260.10
Std Dev: 0.86
This does not yet solve missing padding initialization for structures
on the stack that are never passed by reference (which should be a tiny
minority). Hopefully this will be more easily addressed by upstream
compiler fixes after clarifying the C11 padding initialization
specification.
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
2019-03-04 09:29:41 -08:00
..
basic
kbuild: simplify dependency generation for CONFIG_TRIM_UNUSED_KSYMS
2018-12-01 23:13:14 +09:00
coccinelle
dma-mapping: remove dma_zalloc_coherent()
2019-01-08 07:58:49 -05:00
dtc
Merge branch 'yaml-bindings-for-v4.21' into dt/next
2018-12-13 11:20:36 -06:00
gcc-plugins
gcc-plugins: structleak: Generalize to all variable types
2019-03-04 09:29:41 -08:00
gdb
scripts/gdb: fix lx-version string output
2019-01-04 13:13:47 -08:00
genksyms
kconfig
kconfig: clean generated *conf-cfg files
2019-01-14 10:37:09 +09:00
ksymoops
mod
x86, modpost: Replace last remnants of RETPOLINE with CONFIG_RETPOLINE
2019-01-09 10:35:56 +01:00
package
kbuild: remove redundant 'set -e' from cmd_* defines
2018-12-01 23:13:14 +09:00
selinux
genheaders: %-<width>s had been there since v6; %-*s - since v7
2018-12-10 03:40:11 -05:00
tracing
scripts: Add Python 3 support to tracing/draw_functrace.py
2018-07-29 11:08:38 +09:00
.gitignore
scripts: remove unnecessary ihex2fw and check-lc_ctypes from .gitignore
2018-12-22 00:37:52 +09:00
adjust_autoksyms.sh
asn1_compiler.c
ASN.1: Remove unnecessary shadowed local variable
2018-10-29 00:19:41 +09:00
bin2c.c
kbuild: move bin2c back to scripts/ from scripts/basic/
2018-07-18 01:18:05 +09:00
bloat-o-meter
bloat-o-meter: ignore __addressable_ symbols
2018-12-28 12:11:44 -08:00
bootgraph.pl
bpf_helpers_doc.py
cc-can-link.sh
bpfilter: check compiler capability in Kconfig
2018-06-28 13:36:39 +09:00
check_extable.sh
checkincludes.pl
checkkconfigsymbols.py
checkpatch.pl
checkpatch: add Co-developed-by to signature tags
2019-01-04 13:13:48 -08:00
checkstack.pl
scripts/checkstack.pl: dynamic stack growth for aarch64
2018-12-28 12:11:44 -08:00
checksyscalls.sh
parisc: syscalls: ignore nfsservctl for other architectures
2018-12-10 08:26:04 +01:00
checkversion.pl
clang-version.sh
kbuild: Add a space after ! to prevent parsing as file pattern
2018-08-22 23:21:40 +09:00
cleanfile
cleanpatch
coccicheck
coccicheck: return proper error code on fail
2018-08-14 08:58:56 +09:00
config
conmakehash.c
const_structs.checkpatch
decode_stacktrace.sh
scripts/decode_stacktrace: only strip base path when a prefix of the path
2018-12-28 12:11:44 -08:00
decodecode
scripts/decodecode: set ARCH when running natively on arm/arm64
2018-12-28 12:11:44 -08:00
depmod.sh
kbuild: modules_install: warn when missing System.map file
2018-09-09 09:14:07 +09:00
diffconfig
documentation-file-ref-check
scripts/documentation-file-ref-check: ignore sched-pelt false positive
2018-07-02 11:25:00 -06:00
export_report.pl
extract-cert.c
extract-ikconfig
extract-module-sig.pl
extract-sys-certs.pl
extract-vmlinux
extract-vmlinux: Check for uncompressed image as fallback
2018-10-17 08:18:01 +02:00
extract_xc3028.pl
faddr2line
scripts/faddr2line: fix location of start_kernel in comment
2018-11-18 10:15:09 -08:00
file-size.sh
find-unused-docs.sh
gcc-goto.sh
jump_label: move 'asm goto' support test to Kconfig
2019-01-06 09:46:51 +09:00
gcc-ld
gcc-plugin.sh
gcc-version.sh
gcc-x86_32-has-stack-protector.sh
stack-protector: test compiler capability in Kconfig and drop AUTO mode
2018-06-08 18:56:00 +09:00
gcc-x86_64-has-stack-protector.sh
stack-protector: Fix test with 32-bit userland and CONFIG_64BIT=y
2018-06-25 23:21:13 +09:00
gen_compile_commands.py
scripts: add a tool to produce a compile_commands.json file
2018-12-19 23:41:36 +09:00
gen_ksymdeps.sh
kbuild: simplify dependency generation for CONFIG_TRIM_UNUSED_KSYMS
2018-12-01 23:13:14 +09:00
get_dvb_firmware
get_maintainer.pl
get_maintainer: allow option --mpath <directory> to read all files in <directory>
2018-08-22 10:52:48 -07:00
gfp-translate
headerdep.pl
headers.sh
headers_check.pl
headers_install.sh
insert-sys-cert.c
kallsyms.c
kallsyms: lower alignment on ARM
2019-01-06 09:46:51 +09:00
Kbuild.include
kbuild: remove unused baseprereq
2019-01-14 12:19:40 +09:00
Kconfig.include
gcc-plugins: test plugin support in Kconfig and clean up Makefile
2018-06-11 09:16:22 +09:00
kernel-doc
scripts/kernel-doc: Fix struct and struct field attribute processing
2018-11-25 12:35:45 -07:00
ld-version.sh
leaking_addresses.pl
Lindent
link-vmlinux.sh
kbuild: rename LDFLAGS to KBUILD_LDFLAGS
2018-08-24 08:22:08 +09:00
Makefile
kbuild: descend into scripts/gcc-plugins/ via scripts/Makefile
2018-12-01 23:09:38 +09:00
Makefile.asm-generic
kbuild: generate asm-generic wrappers if mandatory headers are missing
2019-01-06 09:46:51 +09:00
Makefile.build
Kbuild updates for v4.21
2018-12-29 12:03:17 -08:00
Makefile.clean
kbuild: remove deprecated host-progs variable
2018-08-09 21:51:17 +09:00
Makefile.dtbinst
Makefile.extrawarn
Kbuild updates for v4.20 (2nd)
2018-11-03 10:47:33 -07:00
Makefile.gcc-plugins
gcc-plugins: structleak: Generalize to all variable types
2019-03-04 09:29:41 -08:00
Makefile.headersinst
kbuild: generate asm-generic wrappers if mandatory headers are missing
2019-01-06 09:46:51 +09:00
Makefile.host
kbuild: Rename HOST_LOADLIBES to KBUILD_HOSTLDLIBS
2018-07-18 01:18:05 +09:00
Makefile.kasan
kasan: add CONFIG_KASAN_GENERIC and CONFIG_KASAN_SW_TAGS
2018-12-28 12:11:43 -08:00
Makefile.kcov
kcov: test compiler capability in Kconfig and correct dependency
2018-06-11 09:14:08 +09:00
Makefile.lib
kbuild: change filechk to surround the given command with { }
2019-01-06 09:46:51 +09:00
Makefile.modbuiltin
Kbuild: Makefile.modbuiltin: include auto.conf and tristate.conf mandatory
2018-08-03 00:47:00 +09:00
Makefile.modinst
kbuild: remove duplicated comments about PHONY
2018-07-06 22:04:03 +09:00
Makefile.modpost
kbuild: rename LDFLAGS to KBUILD_LDFLAGS
2018-08-24 08:22:08 +09:00
Makefile.modsign
kbuild: remove duplicated comments about PHONY
2018-07-06 22:04:03 +09:00
Makefile.ubsan
lib/ubsan: remove null-pointer checks
2018-08-10 20:19:58 -07:00
makelst
markup_oops.pl
mkcompile_h
mkmakefile
kbuild: simplify command line creation in scripts/mkmakefile
2018-10-04 22:56:02 +09:00
mksysmap
mkuboot.sh
module-common.lds
namespace.pl
objdiff
parse-maintainers.pl
patch-kernel
pnmtologo.c
profile2linkerlist.pl
prune-kernel
recordmcount.c
scripts/recordmcount.{c,pl}: support -ffunction-sections .text.* section names
2018-12-08 20:54:08 -05:00
recordmcount.h
recordmcount.pl
scripts/recordmcount.{c,pl}: support -ffunction-sections .text.* section names
2018-12-08 20:54:08 -05:00
setlocalversion
scripts/setlocalversion: Improve -dirty check with git-status --no-optional-locks
2018-11-21 23:57:33 +09:00
show_delta
sign-file.c
sortextable.c
sortextable.h
spdxcheck-test.sh
scripts: add spdxcheck.py self test
2018-12-28 12:11:44 -08:00
spdxcheck.py
scripts/spdxcheck.py: always open files in binary mode
2018-12-14 15:05:45 -08:00
spelling.txt
treewide: correct "differenciate" and "instanciate" typos
2018-08-23 18:48:43 -07:00
sphinx-pre-install
split-man.pl
stackdelta
stackusage
subarch.include
selftests: add headers_install to lib.mk
2018-09-05 08:12:09 -06:00
tags.sh
scripts/tags.sh: add more declarations
2018-12-28 12:11:44 -08:00
unifdef.c
unifdef: use memcpy instead of strncpy
2018-11-30 14:45:01 -08:00
ver_linux
ver_linux: Do not check for ver_linux pattern in version function
2018-07-07 17:44:52 +02:00
xen-hypercalls.sh
xz_wrap.sh