Unverified Commit 05253633 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!14786 x86/xen: don't do PV iret hypercall through hypercall page

parents 856e5fa6 b73666e1
Loading
Loading
Loading
Loading
+18 −9
Original line number Diff line number Diff line
@@ -176,7 +176,6 @@ SYM_CODE_START(xen_early_idt_handler_array)
SYM_CODE_END(xen_early_idt_handler_array)
	__FINIT

hypercall_iret = hypercall_page + __HYPERVISOR_iret * 32
/*
 * Xen64 iret frame:
 *
@@ -186,17 +185,28 @@ hypercall_iret = hypercall_page + __HYPERVISOR_iret * 32
 *	cs
 *	rip		<-- standard iret frame
 *
 *	flags
 *	flags		<-- xen_iret must push from here on
 *
 *	rcx		}
 *	r11		}<-- pushed by hypercall page
 * rsp->rax		}
 *	rcx
 *	r11
 * rsp->rax
 */
.macro xen_hypercall_iret
	pushq $0	/* Flags */
	push %rcx
	push %r11
	push %rax
	mov  $__HYPERVISOR_iret, %eax
	syscall		/* Do the IRET. */
#ifdef CONFIG_MITIGATION_SLS
	int3
#endif
.endm

SYM_CODE_START(xen_iret)
	UNWIND_HINT_UNDEFINED
	ANNOTATE_NOENDBR
	pushq $0
	jmp hypercall_iret
	xen_hypercall_iret
SYM_CODE_END(xen_iret)

/*
@@ -301,8 +311,7 @@ SYM_CODE_START(xen_entry_SYSENTER_compat)
	ENDBR
	lea 16(%rsp), %rsp	/* strip %rcx, %r11 */
	mov $-ENOSYS, %rax
	pushq $0
	jmp hypercall_iret
	xen_hypercall_iret
SYM_CODE_END(xen_entry_SYSENTER_compat)
SYM_CODE_END(xen_entry_SYSCALL_compat)