diff options
| author | Josh Poimboeuf <jpoimboe@redhat.com> | 2016-02-28 23:22:42 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2016-02-29 02:35:13 -0500 |
| commit | b9ab5ebb14ec389bd80f66613f1fe3f8f65f2521 (patch) | |
| tree | e7c31bac2c2bec5e8b3b2192b4f116c0204eb015 /scripts | |
| parent | 442f04c34a1a467759d024a1d2c1df0f744dcb06 (diff) | |
objtool: Add CONFIG_STACK_VALIDATION option
Add a CONFIG_STACK_VALIDATION option which will run "objtool check" for
each .o file to ensure the validity of its stack metadata.
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Bernd Petrovitsch <bernd@petrovitsch.priv.at>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Chris J Arges <chris.j.arges@canonical.com>
Cc: Jiri Slaby <jslaby@suse.cz>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Michal Marek <mmarek@suse.cz>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Pedro Alves <palves@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: live-patching@vger.kernel.org
Link: http://lkml.kernel.org/r/92baab69a6bf9bc7043af0bfca9fb964a1d45546.1456719558.git.jpoimboe@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/Makefile.build | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 2c47f9c305aa..130a452d42ee 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build | |||
| @@ -241,10 +241,32 @@ cmd_record_mcount = \ | |||
| 241 | fi; | 241 | fi; |
| 242 | endif | 242 | endif |
| 243 | 243 | ||
| 244 | ifdef CONFIG_STACK_VALIDATION | ||
| 245 | |||
| 246 | __objtool_obj := $(objtree)/tools/objtool/objtool | ||
| 247 | |||
| 248 | objtool_args = check | ||
| 249 | ifndef CONFIG_FRAME_POINTER | ||
| 250 | objtool_args += --no-fp | ||
| 251 | endif | ||
| 252 | |||
| 253 | # 'OBJECT_FILES_NON_STANDARD := y': skip objtool checking for a directory | ||
| 254 | # 'OBJECT_FILES_NON_STANDARD_foo.o := 'y': skip objtool checking for a file | ||
| 255 | # 'OBJECT_FILES_NON_STANDARD_foo.o := 'n': override directory skip for a file | ||
| 256 | cmd_objtool = $(if $(patsubst y%,, \ | ||
| 257 | $(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \ | ||
| 258 | $(__objtool_obj) $(objtool_args) "$(@)";) | ||
| 259 | objtool_obj = $(if $(patsubst y%,, \ | ||
| 260 | $(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \ | ||
| 261 | $(__objtool_obj)) | ||
| 262 | |||
| 263 | endif # CONFIG_STACK_VALIDATION | ||
| 264 | |||
| 244 | define rule_cc_o_c | 265 | define rule_cc_o_c |
| 245 | $(call echo-cmd,checksrc) $(cmd_checksrc) \ | 266 | $(call echo-cmd,checksrc) $(cmd_checksrc) \ |
| 246 | $(call echo-cmd,cc_o_c) $(cmd_cc_o_c); \ | 267 | $(call echo-cmd,cc_o_c) $(cmd_cc_o_c); \ |
| 247 | $(cmd_modversions) \ | 268 | $(cmd_modversions) \ |
| 269 | $(cmd_objtool) \ | ||
| 248 | $(call echo-cmd,record_mcount) \ | 270 | $(call echo-cmd,record_mcount) \ |
| 249 | $(cmd_record_mcount) \ | 271 | $(cmd_record_mcount) \ |
| 250 | scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' > \ | 272 | scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' > \ |
| @@ -253,14 +275,23 @@ define rule_cc_o_c | |||
| 253 | mv -f $(dot-target).tmp $(dot-target).cmd | 275 | mv -f $(dot-target).tmp $(dot-target).cmd |
| 254 | endef | 276 | endef |
| 255 | 277 | ||
| 278 | define rule_as_o_S | ||
| 279 | $(call echo-cmd,as_o_S) $(cmd_as_o_S); \ | ||
| 280 | $(cmd_objtool) \ | ||
| 281 | scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,as_o_S)' > \ | ||
| 282 | $(dot-target).tmp; \ | ||
| 283 | rm -f $(depfile); \ | ||
| 284 | mv -f $(dot-target).tmp $(dot-target).cmd | ||
| 285 | endef | ||
| 286 | |||
| 256 | # Built-in and composite module parts | 287 | # Built-in and composite module parts |
| 257 | $(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE | 288 | $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_obj) FORCE |
| 258 | $(call cmd,force_checksrc) | 289 | $(call cmd,force_checksrc) |
| 259 | $(call if_changed_rule,cc_o_c) | 290 | $(call if_changed_rule,cc_o_c) |
| 260 | 291 | ||
| 261 | # Single-part modules are special since we need to mark them in $(MODVERDIR) | 292 | # Single-part modules are special since we need to mark them in $(MODVERDIR) |
| 262 | 293 | ||
| 263 | $(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE | 294 | $(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_obj) FORCE |
| 264 | $(call cmd,force_checksrc) | 295 | $(call cmd,force_checksrc) |
| 265 | $(call if_changed_rule,cc_o_c) | 296 | $(call if_changed_rule,cc_o_c) |
| 266 | @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod) | 297 | @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod) |
| @@ -290,8 +321,8 @@ $(obj)/%.s: $(src)/%.S FORCE | |||
| 290 | quiet_cmd_as_o_S = AS $(quiet_modtag) $@ | 321 | quiet_cmd_as_o_S = AS $(quiet_modtag) $@ |
| 291 | cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< | 322 | cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< |
| 292 | 323 | ||
| 293 | $(obj)/%.o: $(src)/%.S FORCE | 324 | $(obj)/%.o: $(src)/%.S $(objtool_obj) FORCE |
| 294 | $(call if_changed_dep,as_o_S) | 325 | $(call if_changed_rule,as_o_S) |
| 295 | 326 | ||
| 296 | targets += $(real-objs-y) $(real-objs-m) $(lib-y) | 327 | targets += $(real-objs-y) $(real-objs-m) $(lib-y) |
| 297 | targets += $(extra-y) $(MAKECMDGOALS) $(always) | 328 | targets += $(extra-y) $(MAKECMDGOALS) $(always) |
