diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-07-03 11:12:04 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-07-03 11:12:04 -0700 | 
| commit | e94693f797400b9f424c69e1da9381e4846762fe (patch) | |
| tree | b26597a76c48f4b5d7998467fcd357d19412d77f /arch | |
| parent | 26d3a77d2cb3cb31bbaa2de37b7a4e6375f204ee (diff) | |
| parent | 2513cbf9d622d85268655bfd787d4f004342cfc9 (diff) | |
| download | linux-e94693f797400b9f424c69e1da9381e4846762fe.tar.bz2 | |
Merge branch 'core-objtool-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull objtool updates from Ingo Molnar:
 "This is an extensive rewrite of the objdump tool to track all stack
  pointer modifications through the machine instructions of disassembled
  functions found in kernel .o files.
  This re-design removes the prior dependency on CONFIG_FRAME_POINTERS,
  with the goal to prepare the tool to generate kernel debuginfo data in
  the future. There's also an increase in checking/tracking robustness
  as a side effect as well.
  No (intended) changes to existing functionality"
* 'core-objtool-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  objtool: Silence warnings for functions which use IRET
  objtool: Implement stack validation 2.0
  objtool, x86: Add several functions and files to the objtool whitelist
  objtool: Move checking code to check.c
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/x86/crypto/Makefile | 2 | ||||
| -rw-r--r-- | arch/x86/crypto/sha1-mb/Makefile | 2 | ||||
| -rw-r--r-- | arch/x86/crypto/sha256-mb/Makefile | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/Makefile | 1 | ||||
| -rw-r--r-- | arch/x86/kernel/acpi/Makefile | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/kprobes/opt.c | 9 | ||||
| -rw-r--r-- | arch/x86/kernel/reboot.c | 2 | ||||
| -rw-r--r-- | arch/x86/kvm/svm.c | 2 | ||||
| -rw-r--r-- | arch/x86/kvm/vmx.c | 3 | ||||
| -rw-r--r-- | arch/x86/lib/msr-reg.S | 8 | ||||
| -rw-r--r-- | arch/x86/net/Makefile | 2 | ||||
| -rw-r--r-- | arch/x86/platform/efi/Makefile | 1 | ||||
| -rw-r--r-- | arch/x86/power/Makefile | 2 | ||||
| -rw-r--r-- | arch/x86/xen/Makefile | 3 | 
14 files changed, 36 insertions, 5 deletions
| diff --git a/arch/x86/crypto/Makefile b/arch/x86/crypto/Makefile index 34b3fa2889d1..9e32d40d71bd 100644 --- a/arch/x86/crypto/Makefile +++ b/arch/x86/crypto/Makefile @@ -2,6 +2,8 @@  # Arch-specific CryptoAPI modules.  # +OBJECT_FILES_NON_STANDARD := y +  avx_supported := $(call as-instr,vpxor %xmm0$(comma)%xmm0$(comma)%xmm0,yes,no)  avx2_supported := $(call as-instr,vpgatherdd %ymm0$(comma)(%eax$(comma)%ymm1\  				$(comma)4)$(comma)%ymm2,yes,no) diff --git a/arch/x86/crypto/sha1-mb/Makefile b/arch/x86/crypto/sha1-mb/Makefile index 2f8756375df5..2e14acc3da25 100644 --- a/arch/x86/crypto/sha1-mb/Makefile +++ b/arch/x86/crypto/sha1-mb/Makefile @@ -2,6 +2,8 @@  # Arch-specific CryptoAPI modules.  # +OBJECT_FILES_NON_STANDARD := y +  avx2_supported := $(call as-instr,vpgatherdd %ymm0$(comma)(%eax$(comma)%ymm1\                                  $(comma)4)$(comma)%ymm2,yes,no)  ifeq ($(avx2_supported),yes) diff --git a/arch/x86/crypto/sha256-mb/Makefile b/arch/x86/crypto/sha256-mb/Makefile index 41089e7c400c..45b4fca6c4a8 100644 --- a/arch/x86/crypto/sha256-mb/Makefile +++ b/arch/x86/crypto/sha256-mb/Makefile @@ -2,6 +2,8 @@  # Arch-specific CryptoAPI modules.  # +OBJECT_FILES_NON_STANDARD := y +  avx2_supported := $(call as-instr,vpgatherdd %ymm0$(comma)(%eax$(comma)%ymm1\                                  $(comma)4)$(comma)%ymm2,yes,no)  ifeq ($(avx2_supported),yes) diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index 4b994232cb57..3c7c419c4e3e 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -29,6 +29,7 @@ OBJECT_FILES_NON_STANDARD_head_$(BITS).o		:= y  OBJECT_FILES_NON_STANDARD_relocate_kernel_$(BITS).o	:= y  OBJECT_FILES_NON_STANDARD_ftrace_$(BITS).o		:= y  OBJECT_FILES_NON_STANDARD_test_nx.o			:= y +OBJECT_FILES_NON_STANDARD_paravirt_patch_$(BITS).o	:= y  # If instrumentation of this dir is enabled, boot hangs during first second.  # Probably could be more selective here, but note that files related to irqs, diff --git a/arch/x86/kernel/acpi/Makefile b/arch/x86/kernel/acpi/Makefile index 26b78d86f25a..85a9e17e0dbc 100644 --- a/arch/x86/kernel/acpi/Makefile +++ b/arch/x86/kernel/acpi/Makefile @@ -1,3 +1,5 @@ +OBJECT_FILES_NON_STANDARD_wakeup_$(BITS).o := y +  obj-$(CONFIG_ACPI)		+= boot.o  obj-$(CONFIG_ACPI_SLEEP)	+= sleep.o wakeup_$(BITS).o  obj-$(CONFIG_ACPI_APEI)		+= apei.o diff --git a/arch/x86/kernel/kprobes/opt.c b/arch/x86/kernel/kprobes/opt.c index 901c640d152f..69ea0bc1cfa3 100644 --- a/arch/x86/kernel/kprobes/opt.c +++ b/arch/x86/kernel/kprobes/opt.c @@ -28,6 +28,7 @@  #include <linux/kdebug.h>  #include <linux/kallsyms.h>  #include <linux/ftrace.h> +#include <linux/frame.h>  #include <asm/text-patching.h>  #include <asm/cacheflush.h> @@ -94,6 +95,7 @@ static void synthesize_set_arg1(kprobe_opcode_t *addr, unsigned long val)  }  asm ( +			"optprobe_template_func:\n"  			".global optprobe_template_entry\n"  			"optprobe_template_entry:\n"  #ifdef CONFIG_X86_64 @@ -131,7 +133,12 @@ asm (  			"	popf\n"  #endif  			".global optprobe_template_end\n" -			"optprobe_template_end:\n"); +			"optprobe_template_end:\n" +			".type optprobe_template_func, @function\n" +			".size optprobe_template_func, .-optprobe_template_func\n"); + +void optprobe_template_func(void); +STACK_FRAME_NON_STANDARD(optprobe_template_func);  #define TMPL_MOVE_IDX \  	((long)&optprobe_template_val - (long)&optprobe_template_entry) diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index 2544700a2a87..67393fc88353 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c @@ -9,6 +9,7 @@  #include <linux/sched.h>  #include <linux/tboot.h>  #include <linux/delay.h> +#include <linux/frame.h>  #include <acpi/reboot.h>  #include <asm/io.h>  #include <asm/apic.h> @@ -123,6 +124,7 @@ void __noreturn machine_real_restart(unsigned int type)  #ifdef CONFIG_APM_MODULE  EXPORT_SYMBOL(machine_real_restart);  #endif +STACK_FRAME_NON_STANDARD(machine_real_restart);  /*   * Some Apple MacBook and MacBookPro's needs reboot=p to be able to reboot diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index ba9891ac5c56..33460fcdeef9 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -36,6 +36,7 @@  #include <linux/slab.h>  #include <linux/amd-iommu.h>  #include <linux/hashtable.h> +#include <linux/frame.h>  #include <asm/apic.h>  #include <asm/perf_event.h> @@ -4906,6 +4907,7 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)  	mark_all_clean(svm->vmcb);  } +STACK_FRAME_NON_STANDARD(svm_vcpu_run);  static void svm_set_cr3(struct kvm_vcpu *vcpu, unsigned long root)  { diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index ca5d2b93385c..1b469b6c762f 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -33,6 +33,7 @@  #include <linux/slab.h>  #include <linux/tboot.h>  #include <linux/hrtimer.h> +#include <linux/frame.h>  #include "kvm_cache_regs.h"  #include "x86.h" @@ -8652,6 +8653,7 @@ static void vmx_handle_external_intr(struct kvm_vcpu *vcpu)  			);  	}  } +STACK_FRAME_NON_STANDARD(vmx_handle_external_intr);  static bool vmx_has_high_real_mode_segbase(void)  { @@ -9028,6 +9030,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)  	vmx_recover_nmi_blocking(vmx);  	vmx_complete_interrupts(vmx);  } +STACK_FRAME_NON_STANDARD(vmx_vcpu_run);  static void vmx_switch_vmcs(struct kvm_vcpu *vcpu, struct loaded_vmcs *vmcs)  { diff --git a/arch/x86/lib/msr-reg.S b/arch/x86/lib/msr-reg.S index c81556409bbb..10ffa7e8519f 100644 --- a/arch/x86/lib/msr-reg.S +++ b/arch/x86/lib/msr-reg.S @@ -13,14 +13,14 @@  .macro op_safe_regs op  ENTRY(\op\()_safe_regs)  	pushq %rbx -	pushq %rbp +	pushq %r12  	movq	%rdi, %r10	/* Save pointer */  	xorl	%r11d, %r11d	/* Return value */  	movl    (%rdi), %eax  	movl    4(%rdi), %ecx  	movl    8(%rdi), %edx  	movl    12(%rdi), %ebx -	movl    20(%rdi), %ebp +	movl    20(%rdi), %r12d  	movl    24(%rdi), %esi  	movl    28(%rdi), %edi  1:	\op @@ -29,10 +29,10 @@ ENTRY(\op\()_safe_regs)  	movl    %ecx, 4(%r10)  	movl    %edx, 8(%r10)  	movl    %ebx, 12(%r10) -	movl    %ebp, 20(%r10) +	movl    %r12d, 20(%r10)  	movl    %esi, 24(%r10)  	movl    %edi, 28(%r10) -	popq %rbp +	popq %r12  	popq %rbx  	ret  3: diff --git a/arch/x86/net/Makefile b/arch/x86/net/Makefile index 90568c33ddb0..fefb4b619598 100644 --- a/arch/x86/net/Makefile +++ b/arch/x86/net/Makefile @@ -1,4 +1,6 @@  #  # Arch-specific network modules  # +OBJECT_FILES_NON_STANDARD_bpf_jit.o += y +  obj-$(CONFIG_BPF_JIT) += bpf_jit.o bpf_jit_comp.o diff --git a/arch/x86/platform/efi/Makefile b/arch/x86/platform/efi/Makefile index f1d83b34c329..2f56e1ed61c3 100644 --- a/arch/x86/platform/efi/Makefile +++ b/arch/x86/platform/efi/Makefile @@ -1,4 +1,5 @@  OBJECT_FILES_NON_STANDARD_efi_thunk_$(BITS).o := y +OBJECT_FILES_NON_STANDARD_efi_stub_$(BITS).o := y  obj-$(CONFIG_EFI) 		+= quirks.o efi.o efi_$(BITS).o efi_stub_$(BITS).o  obj-$(CONFIG_EARLY_PRINTK_EFI)	+= early_printk.o diff --git a/arch/x86/power/Makefile b/arch/x86/power/Makefile index a6a198c33623..05041871ac90 100644 --- a/arch/x86/power/Makefile +++ b/arch/x86/power/Makefile @@ -1,3 +1,5 @@ +OBJECT_FILES_NON_STANDARD_hibernate_asm_$(BITS).o := y +  # __restore_processor_state() restores %gs after S3 resume and so should not  # itself be stack-protected  nostackp := $(call cc-option, -fno-stack-protector) diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile index fffb0a16f9e3..bced7a369a11 100644 --- a/arch/x86/xen/Makefile +++ b/arch/x86/xen/Makefile @@ -1,3 +1,6 @@ +OBJECT_FILES_NON_STANDARD_xen-asm_$(BITS).o := y +OBJECT_FILES_NON_STANDARD_xen-pvh.o := y +  ifdef CONFIG_FUNCTION_TRACER  # Do not profile debug and lowlevel utilities  CFLAGS_REMOVE_spinlock.o = -pg |