|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] x86: drop ASM_{CL,ST}AC
commit 5fa9a14436af81c3263f9ac31b64972416a59307
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Fri Jan 8 11:48:09 2021 +0100
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Fri Jan 8 11:48:09 2021 +0100
x86: drop ASM_{CL,ST}AC
Use ALTERNATIVE directly, such that at the use sites it is visible that
alternative code patching is in use. Similarly avoid hiding the fact in
SAVE_ALL.
No change to generated code.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
xen/arch/x86/traps.c | 5 ++---
xen/arch/x86/x86_64/compat/entry.S | 8 ++++----
xen/arch/x86/x86_64/entry.S | 24 ++++++++++++++----------
xen/include/asm-x86/asm_defns.h | 23 +----------------------
4 files changed, 21 insertions(+), 39 deletions(-)
diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
index 0459cee9fb..4bd2cb6a1a 100644
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -2200,9 +2200,8 @@ void activate_debugregs(const struct vcpu *curr)
void asm_domain_crash_synchronous(unsigned long addr)
{
/*
- * We need clear AC bit here because in entry.S AC is set
- * by ASM_STAC to temporarily allow accesses to user pages
- * which is prevented by SMAP by default.
+ * We need to clear the AC bit here because the exception fixup logic
+ * may leave user accesses enabled.
*
* For some code paths, where this function is called, clac()
* is not needed, but adding clac() here instead of each place
diff --git a/xen/arch/x86/x86_64/compat/entry.S
b/xen/arch/x86/x86_64/compat/entry.S
index 16a2f439a7..c2c73cc732 100644
--- a/xen/arch/x86/x86_64/compat/entry.S
+++ b/xen/arch/x86/x86_64/compat/entry.S
@@ -14,7 +14,7 @@
#ifdef CONFIG_PV32
ENTRY(entry_int82)
- ASM_CLAC
+ ALTERNATIVE "", clac, X86_FEATURE_XEN_SMAP
pushq $0
movl $HYPERCALL_VECTOR, 4(%rsp)
SAVE_ALL compat=1 /* DPL1 gate, restricted to 32bit PV guests only. */
@@ -290,7 +290,7 @@ ENTRY(compat_int80_direct_trap)
compat_create_bounce_frame:
ASSERT_INTERRUPTS_ENABLED
mov %fs,%edi
- ASM_STAC
+ ALTERNATIVE "", stac, X86_FEATURE_XEN_SMAP
testb $2,UREGS_cs+8(%rsp)
jz 1f
/* Push new frame at registered guest-OS stack base. */
@@ -337,7 +337,7 @@ compat_create_bounce_frame:
movl TRAPBOUNCE_error_code(%rdx),%eax
.Lft8: movl %eax,%fs:(%rsi) # ERROR CODE
1:
- ASM_CLAC
+ ALTERNATIVE "", clac, X86_FEATURE_XEN_SMAP
/* Rewrite our stack frame and return to guest-OS mode. */
/* IA32 Ref. Vol. 3: TF, VM, RF and NT flags are cleared on trap. */
andl $~(X86_EFLAGS_VM|X86_EFLAGS_RF|\
@@ -383,7 +383,7 @@ compat_crash_page_fault_4:
addl $4,%esi
compat_crash_page_fault:
.Lft14: mov %edi,%fs
- ASM_CLAC
+ ALTERNATIVE "", clac, X86_FEATURE_XEN_SMAP
movl %esi,%edi
call show_page_walk
jmp dom_crash_sync_extable
diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S
index c16b3c90be..7292ae8493 100644
--- a/xen/arch/x86/x86_64/entry.S
+++ b/xen/arch/x86/x86_64/entry.S
@@ -280,7 +280,7 @@ ENTRY(sysenter_entry)
pushq $0
pushfq
GLOBAL(sysenter_eflags_saved)
- ASM_CLAC
+ ALTERNATIVE "", clac, X86_FEATURE_XEN_SMAP
pushq $3 /* ring 3 null cs */
pushq $0 /* null rip */
pushq $0
@@ -333,7 +333,7 @@ UNLIKELY_END(sysenter_gpf)
jmp .Lbounce_exception
ENTRY(int80_direct_trap)
- ASM_CLAC
+ ALTERNATIVE "", clac, X86_FEATURE_XEN_SMAP
pushq $0
movl $0x80, 4(%rsp)
SAVE_ALL
@@ -452,7 +452,7 @@ __UNLIKELY_END(create_bounce_frame_bad_sp)
subq $7*8,%rsi
movq UREGS_ss+8(%rsp),%rax
- ASM_STAC
+ ALTERNATIVE "", stac, X86_FEATURE_XEN_SMAP
movq VCPU_domain(%rbx),%rdi
STORE_GUEST_STACK(rax,6) # SS
movq UREGS_rsp+8(%rsp),%rax
@@ -490,7 +490,7 @@ __UNLIKELY_END(create_bounce_frame_bad_sp)
STORE_GUEST_STACK(rax,1) # R11
movq UREGS_rcx+8(%rsp),%rax
STORE_GUEST_STACK(rax,0) # RCX
- ASM_CLAC
+ ALTERNATIVE "", clac, X86_FEATURE_XEN_SMAP
#undef STORE_GUEST_STACK
@@ -532,11 +532,11 @@ domain_crash_page_fault_2x8:
domain_crash_page_fault_1x8:
addq $8,%rsi
domain_crash_page_fault_0x8:
- ASM_CLAC
+ ALTERNATIVE "", clac, X86_FEATURE_XEN_SMAP
movq %rsi,%rdi
call show_page_walk
ENTRY(dom_crash_sync_extable)
- ASM_CLAC
+ ALTERNATIVE "", clac, X86_FEATURE_XEN_SMAP
# Get out of the guest-save area of the stack.
GET_STACK_END(ax)
leaq STACK_CPUINFO_FIELD(guest_cpu_user_regs)(%rax),%rsp
@@ -597,7 +597,8 @@ UNLIKELY_END(exit_cr3)
iretq
ENTRY(common_interrupt)
- SAVE_ALL CLAC
+ ALTERNATIVE "", clac, X86_FEATURE_XEN_SMAP
+ SAVE_ALL
GET_STACK_END(14)
@@ -629,7 +630,8 @@ ENTRY(page_fault)
movl $TRAP_page_fault,4(%rsp)
/* No special register assumptions. */
GLOBAL(handle_exception)
- SAVE_ALL CLAC
+ ALTERNATIVE "", clac, X86_FEATURE_XEN_SMAP
+ SAVE_ALL
GET_STACK_END(14)
@@ -834,7 +836,8 @@ ENTRY(entry_CP)
ENTRY(double_fault)
movl $TRAP_double_fault,4(%rsp)
/* Set AC to reduce chance of further SMAP faults */
- SAVE_ALL STAC
+ ALTERNATIVE "", stac, X86_FEATURE_XEN_SMAP
+ SAVE_ALL
GET_STACK_END(14)
@@ -867,7 +870,8 @@ ENTRY(nmi)
pushq $0
movl $TRAP_nmi,4(%rsp)
handle_ist_exception:
- SAVE_ALL CLAC
+ ALTERNATIVE "", clac, X86_FEATURE_XEN_SMAP
+ SAVE_ALL
GET_STACK_END(14)
diff --git a/xen/include/asm-x86/asm_defns.h b/xen/include/asm-x86/asm_defns.h
index 901fb89cef..f8de679feb 100644
--- a/xen/include/asm-x86/asm_defns.h
+++ b/xen/include/asm-x86/asm_defns.h
@@ -199,16 +199,6 @@ register unsigned long current_stack_pointer asm("rsp");
UNLIKELY_END_SECTION "\n" \
".Llikely." #tag ".%=:"
-#endif
-
-#ifdef __ASSEMBLY__
-.macro ASM_STAC
- ALTERNATIVE "", stac, X86_FEATURE_XEN_SMAP
-.endm
-.macro ASM_CLAC
- ALTERNATIVE "", clac, X86_FEATURE_XEN_SMAP
-.endm
-#else
static always_inline void clac(void)
{
/* Note: a barrier is implicit in alternative() */
@@ -223,18 +213,7 @@ static always_inline void stac(void)
#endif
#ifdef __ASSEMBLY__
-.macro SAVE_ALL op, compat=0
-.ifeqs "\op", "CLAC"
- ASM_CLAC
-.else
-.ifeqs "\op", "STAC"
- ASM_STAC
-.else
-.ifnb \op
- .err
-.endif
-.endif
-.endif
+.macro SAVE_ALL compat=0
addq $-(UREGS_error_code-UREGS_r15), %rsp
cld
movq %rdi,UREGS_rdi(%rsp)
--
generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |