x86/entry: Erase guest GPR state on entry to Xen

This reduces the number of code gadgets which can be attacked with arbitrary
guest-controlled GPR values.

This is part of XSA-254.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
master commit: 03bd8c3a70
master date: 2018-01-05 19:57:08 +0000
This commit is contained in:
Andrew Cooper authored and Jan Beulich committed 2018-02-08 12:44:21 +01:00
1 parent eadcd8318c
commit 987b08d56c
1 file changed
+16
+16
View File
@@ -247,22 +247,34 @@ static always_inline void stac(void)
addq $-(UREGS_error_code-UREGS_r15), %rsp
cld
movq %rdi,UREGS_rdi(%rsp)
xor %edi, %edi
movq %rsi,UREGS_rsi(%rsp)
xor %esi, %esi
movq %rdx,UREGS_rdx(%rsp)
xor %edx, %edx
movq %rcx,UREGS_rcx(%rsp)
xor %ecx, %ecx
movq %rax,UREGS_rax(%rsp)
xor %eax, %eax
.if !\compat
movq %r8,UREGS_r8(%rsp)
movq %r9,UREGS_r9(%rsp)
movq %r10,UREGS_r10(%rsp)
movq %r11,UREGS_r11(%rsp)
.endif
xor %r8, %r8
xor %r9, %r9
xor %r10, %r10
xor %r11, %r11
movq %rbx,UREGS_rbx(%rsp)
xor %ebx, %ebx
movq %rbp,UREGS_rbp(%rsp)
#ifdef CONFIG_FRAME_POINTER
/* Indicate special exception stack frame by inverting the frame pointer. */
leaq UREGS_rbp(%rsp), %rbp
notq %rbp
#else
xor %ebp, %ebp
#endif
.if !\compat
movq %r12,UREGS_r12(%rsp)
@@ -270,6 +282,10 @@ static always_inline void stac(void)
movq %r14,UREGS_r14(%rsp)
movq %r15,UREGS_r15(%rsp)
.endif
xor %r12, %r12
xor %r13, %r13
xor %r14, %r14
xor %r15, %r15
.endm
#define LOAD_ONE_REG(reg, compat) \
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.