Skip to content

Commit 76261fc

Browse files
committed
stackleak: Split KSTACK_ERASE_CFLAGS from GCC_PLUGINS_CFLAGS
In preparation for Clang stack depth tracking for KSTACK_ERASE, split the stackleak-specific cflags out of GCC_PLUGINS_CFLAGS into KSTACK_ERASE_CFLAGS. Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Kees Cook <[email protected]>
1 parent 9ea1e8d commit 76261fc

File tree

8 files changed

+27
-18
lines changed

8 files changed

+27
-18
lines changed

MAINTAINERS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13094,6 +13094,8 @@ F: kernel/kstack_erase.c
1309413094
F: lib/tests/randstruct_kunit.c
1309513095
F: lib/tests/usercopy_kunit.c
1309613096
F: mm/usercopy.c
13097+
F: scripts/Makefile.kstack_erase
13098+
F: scripts/Makefile.randstruct
1309713099
F: security/Kconfig.hardening
1309813100
K: \b(add|choose)_random_kstack_offset\b
1309913101
K: \b__check_(object_size|heap_object)\b

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,6 +1086,7 @@ include-$(CONFIG_KMSAN) += scripts/Makefile.kmsan
10861086
include-$(CONFIG_UBSAN) += scripts/Makefile.ubsan
10871087
include-$(CONFIG_KCOV) += scripts/Makefile.kcov
10881088
include-$(CONFIG_RANDSTRUCT) += scripts/Makefile.randstruct
1089+
include-$(CONFIG_KSTACK_ERASE) += scripts/Makefile.kstack_erase
10891090
include-$(CONFIG_AUTOFDO_CLANG) += scripts/Makefile.autofdo
10901091
include-$(CONFIG_PROPELLER_CLANG) += scripts/Makefile.propeller
10911092
include-$(CONFIG_GCC_PLUGINS) += scripts/Makefile.gcc-plugins

arch/arm/vdso/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ CPPFLAGS_vdso.lds += -P -C -U$(ARCH)
2626
CFLAGS_REMOVE_vdso.o = -pg
2727

2828
# Force -O2 to avoid libgcc dependencies
29-
CFLAGS_REMOVE_vgettimeofday.o = -pg -Os $(RANDSTRUCT_CFLAGS) $(GCC_PLUGINS_CFLAGS)
29+
CFLAGS_REMOVE_vgettimeofday.o = -pg -Os $(RANDSTRUCT_CFLAGS) $(KSTACK_ERASE_CFLAGS) $(GCC_PLUGINS_CFLAGS)
3030
ifeq ($(c-gettimeofday-y),)
3131
CFLAGS_vgettimeofday.o = -O2
3232
else

arch/arm64/kernel/vdso/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ ccflags-y += -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO
3636
# -Wmissing-prototypes and -Wmissing-declarations are removed from
3737
# the CFLAGS to make possible to build the kernel with CONFIG_WERROR enabled.
3838
CC_FLAGS_REMOVE_VDSO := $(CC_FLAGS_FTRACE) -Os $(CC_FLAGS_SCS) \
39-
$(RANDSTRUCT_CFLAGS) $(GCC_PLUGINS_CFLAGS) \
39+
$(RANDSTRUCT_CFLAGS) $(KSTACK_ERASE_CFLAGS) \
40+
$(GCC_PLUGINS_CFLAGS) \
4041
$(CC_FLAGS_LTO) $(CC_FLAGS_CFI) \
4142
-Wmissing-prototypes -Wmissing-declarations
4243

arch/sparc/vdso/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ CFL := $(PROFILING) -mcmodel=medlow -fPIC -O2 -fasynchronous-unwind-tables -m64
4848

4949
SPARC_REG_CFLAGS = -ffixed-g4 -ffixed-g5 $(call cc-option,-fcall-used-g5) $(call cc-option,-fcall-used-g7)
5050

51-
$(vobjs): KBUILD_CFLAGS := $(filter-out $(RANDSTRUCT_CFLAGS) $(GCC_PLUGINS_CFLAGS) $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS)) $(CFL)
51+
$(vobjs): KBUILD_CFLAGS := $(filter-out $(RANDSTRUCT_CFLAGS) $(KSTACK_ERASE_CFLAGS) $(GCC_PLUGINS_CFLAGS) $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS)) $(CFL)
5252

5353
#
5454
# vDSO code runs in userspace and -pg doesn't help with profiling anyway.
@@ -79,6 +79,7 @@ KBUILD_CFLAGS_32 := $(filter-out -m64,$(KBUILD_CFLAGS))
7979
KBUILD_CFLAGS_32 := $(filter-out -mcmodel=medlow,$(KBUILD_CFLAGS_32))
8080
KBUILD_CFLAGS_32 := $(filter-out -fno-pic,$(KBUILD_CFLAGS_32))
8181
KBUILD_CFLAGS_32 := $(filter-out $(RANDSTRUCT_CFLAGS),$(KBUILD_CFLAGS_32))
82+
KBUILD_CFLAGS_32 := $(filter-out $(KSTACK_ERASE_CFLAGS),$(KBUILD_CFLAGS_32))
8283
KBUILD_CFLAGS_32 := $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS_32))
8384
KBUILD_CFLAGS_32 := $(filter-out $(SPARC_REG_CFLAGS),$(KBUILD_CFLAGS_32))
8485
KBUILD_CFLAGS_32 += -m32 -msoft-float -fpic

arch/x86/entry/vdso/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ ifneq ($(RETPOLINE_VDSO_CFLAGS),)
6262
endif
6363
endif
6464

65-
$(vobjs): KBUILD_CFLAGS := $(filter-out $(PADDING_CFLAGS) $(CC_FLAGS_LTO) $(CC_FLAGS_CFI) $(RANDSTRUCT_CFLAGS) $(GCC_PLUGINS_CFLAGS) $(RETPOLINE_CFLAGS),$(KBUILD_CFLAGS)) $(CFL)
65+
$(vobjs): KBUILD_CFLAGS := $(filter-out $(PADDING_CFLAGS) $(CC_FLAGS_LTO) $(CC_FLAGS_CFI) $(RANDSTRUCT_CFLAGS) $(KSTACK_ERASE_CFLAGS) $(GCC_PLUGINS_CFLAGS) $(RETPOLINE_CFLAGS),$(KBUILD_CFLAGS)) $(CFL)
6666
$(vobjs): KBUILD_AFLAGS += -DBUILD_VDSO
6767

6868
#
@@ -123,6 +123,7 @@ KBUILD_CFLAGS_32 := $(filter-out -mcmodel=kernel,$(KBUILD_CFLAGS_32))
123123
KBUILD_CFLAGS_32 := $(filter-out -fno-pic,$(KBUILD_CFLAGS_32))
124124
KBUILD_CFLAGS_32 := $(filter-out -mfentry,$(KBUILD_CFLAGS_32))
125125
KBUILD_CFLAGS_32 := $(filter-out $(RANDSTRUCT_CFLAGS),$(KBUILD_CFLAGS_32))
126+
KBUILD_CFLAGS_32 := $(filter-out $(KSTACK_ERASE_CFLAGS),$(KBUILD_CFLAGS_32))
126127
KBUILD_CFLAGS_32 := $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS_32))
127128
KBUILD_CFLAGS_32 := $(filter-out $(RETPOLINE_CFLAGS),$(KBUILD_CFLAGS_32))
128129
KBUILD_CFLAGS_32 := $(filter-out $(CC_FLAGS_LTO),$(KBUILD_CFLAGS_32))

scripts/Makefile.gcc-plugins

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,6 @@ ifdef CONFIG_GCC_PLUGIN_LATENT_ENTROPY
88
endif
99
export DISABLE_LATENT_ENTROPY_PLUGIN
1010

11-
gcc-plugin-$(CONFIG_GCC_PLUGIN_STACKLEAK) += stackleak_plugin.so
12-
gcc-plugin-cflags-$(CONFIG_GCC_PLUGIN_STACKLEAK) \
13-
+= -DSTACKLEAK_PLUGIN
14-
gcc-plugin-cflags-$(CONFIG_GCC_PLUGIN_STACKLEAK) \
15-
+= -fplugin-arg-stackleak_plugin-track-min-size=$(CONFIG_KSTACK_ERASE_TRACK_MIN_SIZE)
16-
gcc-plugin-cflags-$(CONFIG_GCC_PLUGIN_STACKLEAK) \
17-
+= -fplugin-arg-stackleak_plugin-arch=$(SRCARCH)
18-
gcc-plugin-cflags-$(CONFIG_GCC_PLUGIN_STACKLEAK_VERBOSE) \
19-
+= -fplugin-arg-stackleak_plugin-verbose
20-
ifdef CONFIG_GCC_PLUGIN_STACKLEAK
21-
DISABLE_KSTACK_ERASE += -fplugin-arg-stackleak_plugin-disable
22-
endif
23-
export DISABLE_KSTACK_ERASE
24-
2511
# All the plugin CFLAGS are collected here in case a build target needs to
2612
# filter them out of the KBUILD_CFLAGS.
2713
GCC_PLUGINS_CFLAGS := $(strip $(addprefix -fplugin=$(objtree)/scripts/gcc-plugins/, $(gcc-plugin-y)) $(gcc-plugin-cflags-y)) -DGCC_PLUGINS
@@ -34,6 +20,8 @@ KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS)
3420
# be included in GCC_PLUGIN so they can get built.
3521
gcc-plugin-external-$(CONFIG_GCC_PLUGIN_RANDSTRUCT) \
3622
+= randomize_layout_plugin.so
23+
gcc-plugin-external-$(CONFIG_GCC_PLUGIN_STACKLEAK) \
24+
+= stackleak_plugin.so
3725

3826
# All enabled GCC plugins are collected here for building in
3927
# scripts/gcc-scripts/Makefile.

scripts/Makefile.kstack_erase

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# SPDX-License-Identifier: GPL-2.0
2+
3+
ifdef CONFIG_GCC_PLUGIN_STACKLEAK
4+
kstack-erase-cflags-y += -fplugin=$(objtree)/scripts/gcc-plugins/stackleak_plugin.so
5+
kstack-erase-cflags-y += -fplugin-arg-stackleak_plugin-track-min-size=$(CONFIG_KSTACK_ERASE_TRACK_MIN_SIZE)
6+
kstack-erase-cflags-y += -fplugin-arg-stackleak_plugin-arch=$(SRCARCH)
7+
kstack-erase-cflags-$(CONFIG_GCC_PLUGIN_STACKLEAK_VERBOSE) += -fplugin-arg-stackleak_plugin-verbose
8+
DISABLE_KSTACK_ERASE := -fplugin-arg-stackleak_plugin-disable
9+
endif
10+
11+
KSTACK_ERASE_CFLAGS := $(kstack-erase-cflags-y)
12+
13+
export STACKLEAK_CFLAGS DISABLE_KSTACK_ERASE
14+
15+
KBUILD_CFLAGS += $(KSTACK_ERASE_CFLAGS)

0 commit comments

Comments
 (0)