|
@@ -227,35 +227,8 @@ ENTRY(entry_SYSCALL_64)
|
|
|
pushq %rcx /* pt_regs->ip */
|
|
|
GLOBAL(entry_SYSCALL_64_after_hwframe)
|
|
|
pushq %rax /* pt_regs->orig_ax */
|
|
|
- pushq %rdi /* pt_regs->di */
|
|
|
- pushq %rsi /* pt_regs->si */
|
|
|
- pushq %rdx /* pt_regs->dx */
|
|
|
- pushq %rcx /* pt_regs->cx */
|
|
|
- pushq $-ENOSYS /* pt_regs->ax */
|
|
|
- pushq %r8 /* pt_regs->r8 */
|
|
|
- pushq %r9 /* pt_regs->r9 */
|
|
|
- pushq %r10 /* pt_regs->r10 */
|
|
|
- /*
|
|
|
- * Clear extra registers that a speculation attack might
|
|
|
- * otherwise want to exploit. Interleave XOR with PUSH
|
|
|
- * for better uop scheduling:
|
|
|
- */
|
|
|
- xorq %r10, %r10 /* nospec r10 */
|
|
|
- pushq %r11 /* pt_regs->r11 */
|
|
|
- xorq %r11, %r11 /* nospec r11 */
|
|
|
- pushq %rbx /* pt_regs->rbx */
|
|
|
- xorl %ebx, %ebx /* nospec rbx */
|
|
|
- pushq %rbp /* pt_regs->rbp */
|
|
|
- xorl %ebp, %ebp /* nospec rbp */
|
|
|
- pushq %r12 /* pt_regs->r12 */
|
|
|
- xorq %r12, %r12 /* nospec r12 */
|
|
|
- pushq %r13 /* pt_regs->r13 */
|
|
|
- xorq %r13, %r13 /* nospec r13 */
|
|
|
- pushq %r14 /* pt_regs->r14 */
|
|
|
- xorq %r14, %r14 /* nospec r14 */
|
|
|
- pushq %r15 /* pt_regs->r15 */
|
|
|
- xorq %r15, %r15 /* nospec r15 */
|
|
|
- UNWIND_HINT_REGS
|
|
|
+
|
|
|
+ PUSH_AND_CLEAR_REGS rax=$-ENOSYS
|
|
|
|
|
|
TRACE_IRQS_OFF
|
|
|
|
|
@@ -1388,39 +1361,7 @@ ENTRY(nmi)
|
|
|
pushq 1*8(%rdx) /* pt_regs->rip */
|
|
|
UNWIND_HINT_IRET_REGS
|
|
|
pushq $-1 /* pt_regs->orig_ax */
|
|
|
- pushq %rdi /* pt_regs->di */
|
|
|
- pushq %rsi /* pt_regs->si */
|
|
|
- pushq (%rdx) /* pt_regs->dx */
|
|
|
- pushq %rcx /* pt_regs->cx */
|
|
|
- pushq %rax /* pt_regs->ax */
|
|
|
- /*
|
|
|
- * Sanitize registers of values that a speculation attack
|
|
|
- * might otherwise want to exploit. The lower registers are
|
|
|
- * likely clobbered well before they could be put to use in
|
|
|
- * a speculative execution gadget. Interleave XOR with PUSH
|
|
|
- * for better uop scheduling:
|
|
|
- */
|
|
|
- pushq %r8 /* pt_regs->r8 */
|
|
|
- xorq %r8, %r8 /* nospec r8 */
|
|
|
- pushq %r9 /* pt_regs->r9 */
|
|
|
- xorq %r9, %r9 /* nospec r9 */
|
|
|
- pushq %r10 /* pt_regs->r10 */
|
|
|
- xorq %r10, %r10 /* nospec r10 */
|
|
|
- pushq %r11 /* pt_regs->r11 */
|
|
|
- xorq %r11, %r11 /* nospec r11*/
|
|
|
- pushq %rbx /* pt_regs->rbx */
|
|
|
- xorl %ebx, %ebx /* nospec rbx*/
|
|
|
- pushq %rbp /* pt_regs->rbp */
|
|
|
- xorl %ebp, %ebp /* nospec rbp*/
|
|
|
- pushq %r12 /* pt_regs->r12 */
|
|
|
- xorq %r12, %r12 /* nospec r12*/
|
|
|
- pushq %r13 /* pt_regs->r13 */
|
|
|
- xorq %r13, %r13 /* nospec r13*/
|
|
|
- pushq %r14 /* pt_regs->r14 */
|
|
|
- xorq %r14, %r14 /* nospec r14*/
|
|
|
- pushq %r15 /* pt_regs->r15 */
|
|
|
- xorq %r15, %r15 /* nospec r15*/
|
|
|
- UNWIND_HINT_REGS
|
|
|
+ PUSH_AND_CLEAR_REGS rdx=(%rdx)
|
|
|
ENCODE_FRAME_POINTER
|
|
|
|
|
|
/*
|