Merge branch 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull core fixes from Thomas Gleixner: - A collection of objtool fixes which address recent fallout partially exposed by newer toolchains, clang, BPF and general code changes. - Force USER_DS for user stack traces [ Note: the "objtool fixes" are not all to objtool itself, but for kernel code that triggers objtool warnings. Things like missing function size annotations, or code that confuses the unwinder etc. - Linus] * 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (27 commits) objtool: Support conditional retpolines objtool: Convert insn type to enum objtool: Fix seg fault on bad switch table entry objtool: Support repeated uses of the same C jump table objtool: Refactor jump table code objtool: Refactor sibling call detection logic objtool: Do frame pointer check before dead end check objtool: Change dead_end_function() to return boolean objtool: Warn on zero-length functions objtool: Refactor function alias logic objtool: Track original function across branches objtool: Add mcsafe_handle_tail() to the uaccess safe list bpf: Disable GCC -fgcse optimization for ___bpf_prog_run() x86/uaccess: Remove redundant CLACs in getuser/putuser error paths x86/uaccess: Don't leak AC flag into fentry from mcsafe_handle_tail() x86/uaccess: Remove ELF function annotation from copy_user_handle_tail() x86/head/64: Annotate start_cpu0() as non-callable x86/entry: Fix thunk function ELF sizes x86/kvm: Don't call kvm_spurious_fault() from .fixup x86/kvm: Replace vmx_vmenter()'s call to kvm_spurious_fault() with UD2 ...
这个提交包含在:
@@ -312,29 +312,42 @@ static void invalidate_registers(struct x86_emulate_ctxt *ctxt)
|
||||
|
||||
static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *));
|
||||
|
||||
#define FOP_FUNC(name) \
|
||||
#define __FOP_FUNC(name) \
|
||||
".align " __stringify(FASTOP_SIZE) " \n\t" \
|
||||
".type " name ", @function \n\t" \
|
||||
name ":\n\t"
|
||||
|
||||
#define FOP_RET "ret \n\t"
|
||||
#define FOP_FUNC(name) \
|
||||
__FOP_FUNC(#name)
|
||||
|
||||
#define __FOP_RET(name) \
|
||||
"ret \n\t" \
|
||||
".size " name ", .-" name "\n\t"
|
||||
|
||||
#define FOP_RET(name) \
|
||||
__FOP_RET(#name)
|
||||
|
||||
#define FOP_START(op) \
|
||||
extern void em_##op(struct fastop *fake); \
|
||||
asm(".pushsection .text, \"ax\" \n\t" \
|
||||
".global em_" #op " \n\t" \
|
||||
FOP_FUNC("em_" #op)
|
||||
".align " __stringify(FASTOP_SIZE) " \n\t" \
|
||||
"em_" #op ":\n\t"
|
||||
|
||||
#define FOP_END \
|
||||
".popsection")
|
||||
|
||||
#define __FOPNOP(name) \
|
||||
__FOP_FUNC(name) \
|
||||
__FOP_RET(name)
|
||||
|
||||
#define FOPNOP() \
|
||||
FOP_FUNC(__stringify(__UNIQUE_ID(nop))) \
|
||||
FOP_RET
|
||||
__FOPNOP(__stringify(__UNIQUE_ID(nop)))
|
||||
|
||||
#define FOP1E(op, dst) \
|
||||
FOP_FUNC(#op "_" #dst) \
|
||||
"10: " #op " %" #dst " \n\t" FOP_RET
|
||||
__FOP_FUNC(#op "_" #dst) \
|
||||
"10: " #op " %" #dst " \n\t" \
|
||||
__FOP_RET(#op "_" #dst)
|
||||
|
||||
#define FOP1EEX(op, dst) \
|
||||
FOP1E(op, dst) _ASM_EXTABLE(10b, kvm_fastop_exception)
|
||||
@@ -366,8 +379,9 @@ static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *));
|
||||
FOP_END
|
||||
|
||||
#define FOP2E(op, dst, src) \
|
||||
FOP_FUNC(#op "_" #dst "_" #src) \
|
||||
#op " %" #src ", %" #dst " \n\t" FOP_RET
|
||||
__FOP_FUNC(#op "_" #dst "_" #src) \
|
||||
#op " %" #src ", %" #dst " \n\t" \
|
||||
__FOP_RET(#op "_" #dst "_" #src)
|
||||
|
||||
#define FASTOP2(op) \
|
||||
FOP_START(op) \
|
||||
@@ -405,8 +419,9 @@ static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *));
|
||||
FOP_END
|
||||
|
||||
#define FOP3E(op, dst, src, src2) \
|
||||
FOP_FUNC(#op "_" #dst "_" #src "_" #src2) \
|
||||
#op " %" #src2 ", %" #src ", %" #dst " \n\t" FOP_RET
|
||||
__FOP_FUNC(#op "_" #dst "_" #src "_" #src2) \
|
||||
#op " %" #src2 ", %" #src ", %" #dst " \n\t"\
|
||||
__FOP_RET(#op "_" #dst "_" #src "_" #src2)
|
||||
|
||||
/* 3-operand, word-only, src2=cl */
|
||||
#define FASTOP3WCL(op) \
|
||||
@@ -423,7 +438,7 @@ static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *));
|
||||
".type " #op ", @function \n\t" \
|
||||
#op ": \n\t" \
|
||||
#op " %al \n\t" \
|
||||
FOP_RET
|
||||
__FOP_RET(#op)
|
||||
|
||||
asm(".pushsection .fixup, \"ax\"\n"
|
||||
".global kvm_fastop_exception \n"
|
||||
@@ -449,7 +464,10 @@ FOP_SETCC(setle)
|
||||
FOP_SETCC(setnle)
|
||||
FOP_END;
|
||||
|
||||
FOP_START(salc) "pushf; sbb %al, %al; popf \n\t" FOP_RET
|
||||
FOP_START(salc)
|
||||
FOP_FUNC(salc)
|
||||
"pushf; sbb %al, %al; popf \n\t"
|
||||
FOP_RET(salc)
|
||||
FOP_END;
|
||||
|
||||
/*
|
||||
|
@@ -54,9 +54,9 @@ ENTRY(vmx_vmenter)
|
||||
ret
|
||||
|
||||
3: cmpb $0, kvm_rebooting
|
||||
jne 4f
|
||||
call kvm_spurious_fault
|
||||
4: ret
|
||||
je 4f
|
||||
ret
|
||||
4: ud2
|
||||
|
||||
.pushsection .fixup, "ax"
|
||||
5: jmp 3b
|
||||
|
在新工单中引用
屏蔽一个用户