WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] hvm: Register fields CS, DS, ES, FS, GS,

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] hvm: Register fields CS, DS, ES, FS, GS, SS, etc. are all undefined during
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 27 Dec 2007 06:50:07 -0800
Delivery-date: Thu, 27 Dec 2007 06:50:16 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1198751944 0
# Node ID 2324110ef2c69da2b530d8762bb7bc4257084b07
# Parent  717f0dce76e7859dbd0648190ce8dfc3ec0f8170
hvm: Register fields CS,DS,ES,FS,GS,SS,etc. are all undefined during
HVM execution as they are not saved/restore on vmexit/vmentry. To
prevent accidental usage of these fields, poison them with 16-bit
value 0xbeef (debug builds only).
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/arch/x86/hvm/svm/x86_32/exits.S |   13 +++++++++++++
 xen/arch/x86/hvm/svm/x86_64/exits.S |   13 +++++++++++++
 xen/arch/x86/hvm/vmx/x86_32/exits.S |   14 +++++++++++++-
 xen/arch/x86/hvm/vmx/x86_64/exits.S |   13 +++++++++++++
 xen/arch/x86/x86_32/asm-offsets.c   |    1 +
 xen/arch/x86/x86_64/asm-offsets.c   |    5 +++++
 6 files changed, 58 insertions(+), 1 deletion(-)

diff -r 717f0dce76e7 -r 2324110ef2c6 xen/arch/x86/hvm/svm/x86_32/exits.S
--- a/xen/arch/x86/hvm/svm/x86_32/exits.S       Sat Dec 22 10:27:26 2007 +0000
+++ b/xen/arch/x86/hvm/svm/x86_32/exits.S       Thu Dec 27 10:39:04 2007 +0000
@@ -94,6 +94,19 @@ svm_trace_done:
         movl VMCB_rflags(%ecx),%eax
         movl %eax,UREGS_eflags(%esp)
 
+#ifndef NDEBUG
+        movw $0xbeef,%ax
+        movw %ax,UREGS_error_code(%esp)
+        movw %ax,UREGS_entry_vector(%esp)
+        movw %ax,UREGS_saved_upcall_mask(%esp)
+        movw %ax,UREGS_cs(%esp)
+        movw %ax,UREGS_ds(%esp)
+        movw %ax,UREGS_es(%esp)
+        movw %ax,UREGS_fs(%esp)
+        movw %ax,UREGS_gs(%esp)
+        movw %ax,UREGS_ss(%esp)
+#endif
+
         STGI
 .globl svm_stgi_label;
 svm_stgi_label:
diff -r 717f0dce76e7 -r 2324110ef2c6 xen/arch/x86/hvm/svm/x86_64/exits.S
--- a/xen/arch/x86/hvm/svm/x86_64/exits.S       Sat Dec 22 10:27:26 2007 +0000
+++ b/xen/arch/x86/hvm/svm/x86_64/exits.S       Thu Dec 27 10:39:04 2007 +0000
@@ -113,6 +113,19 @@ svm_trace_done:
         movq VMCB_rflags(%rcx),%rax
         movq %rax,UREGS_eflags(%rsp)
 
+#ifndef NDEBUG
+        movw $0xbeef,%ax
+        movw %ax,UREGS_error_code(%rsp)
+        movw %ax,UREGS_entry_vector(%rsp)
+        movw %ax,UREGS_saved_upcall_mask(%rsp)
+        movw %ax,UREGS_cs(%rsp)
+        movw %ax,UREGS_ds(%rsp)
+        movw %ax,UREGS_es(%rsp)
+        movw %ax,UREGS_fs(%rsp)
+        movw %ax,UREGS_gs(%rsp)
+        movw %ax,UREGS_ss(%rsp)
+#endif
+
         STGI
 .globl svm_stgi_label;
 svm_stgi_label:
diff -r 717f0dce76e7 -r 2324110ef2c6 xen/arch/x86/hvm/vmx/x86_32/exits.S
--- a/xen/arch/x86/hvm/vmx/x86_32/exits.S       Sat Dec 22 10:27:26 2007 +0000
+++ b/xen/arch/x86/hvm/vmx/x86_32/exits.S       Thu Dec 27 10:39:04 2007 +0000
@@ -40,7 +40,6 @@
         movl (reg),reg;
 
 #define HVM_SAVE_ALL_NOSEGREGS                                              \
-        movl $0, 0xc(%esp);  /* XXX why do we need to force eflags==0 ?? */ \
         pushl %eax;                                                         \
         pushl %ebp;                                                         \
         pushl %edi;                                                         \
@@ -68,6 +67,19 @@ ENTRY(vmx_asm_vmexit_handler)
         VMREAD(UREGS_esp)
         movl $GUEST_RFLAGS,%eax
         VMREAD(UREGS_eflags)
+
+#ifndef NDEBUG
+        movw $0xbeef,%ax
+        movw %ax,UREGS_error_code(%esp)
+        movw %ax,UREGS_entry_vector(%esp)
+        movw %ax,UREGS_saved_upcall_mask(%esp)
+        movw %ax,UREGS_cs(%esp)
+        movw %ax,UREGS_ds(%esp)
+        movw %ax,UREGS_es(%esp)
+        movw %ax,UREGS_fs(%esp)
+        movw %ax,UREGS_gs(%esp)
+        movw %ax,UREGS_ss(%esp)
+#endif
 
         movl %esp,%eax
         push %eax
diff -r 717f0dce76e7 -r 2324110ef2c6 xen/arch/x86/hvm/vmx/x86_64/exits.S
--- a/xen/arch/x86/hvm/vmx/x86_64/exits.S       Sat Dec 22 10:27:26 2007 +0000
+++ b/xen/arch/x86/hvm/vmx/x86_64/exits.S       Thu Dec 27 10:39:04 2007 +0000
@@ -86,6 +86,19 @@ ENTRY(vmx_asm_vmexit_handler)
         movl $GUEST_RFLAGS,%eax
         VMREAD(UREGS_eflags)
 
+#ifndef NDEBUG
+        movw $0xbeef,%ax
+        movw %ax,UREGS_error_code(%rsp)
+        movw %ax,UREGS_entry_vector(%rsp)
+        movw %ax,UREGS_saved_upcall_mask(%rsp)
+        movw %ax,UREGS_cs(%rsp)
+        movw %ax,UREGS_ds(%rsp)
+        movw %ax,UREGS_es(%rsp)
+        movw %ax,UREGS_fs(%rsp)
+        movw %ax,UREGS_gs(%rsp)
+        movw %ax,UREGS_ss(%rsp)
+#endif
+
         movq %rsp,%rdi
         call vmx_vmexit_handler
         jmp vmx_asm_do_vmentry
diff -r 717f0dce76e7 -r 2324110ef2c6 xen/arch/x86/x86_32/asm-offsets.c
--- a/xen/arch/x86/x86_32/asm-offsets.c Sat Dec 22 10:27:26 2007 +0000
+++ b/xen/arch/x86/x86_32/asm-offsets.c Thu Dec 27 10:39:04 2007 +0000
@@ -44,6 +44,7 @@ void __dummy__(void)
     OFFSET(UREGS_eflags, struct cpu_user_regs, eflags);
     OFFSET(UREGS_error_code, struct cpu_user_regs, error_code);
     OFFSET(UREGS_entry_vector, struct cpu_user_regs, entry_vector);
+    OFFSET(UREGS_saved_upcall_mask, struct cpu_user_regs, saved_upcall_mask);
     OFFSET(UREGS_kernel_sizeof, struct cpu_user_regs, esp);
     DEFINE(UREGS_user_sizeof, sizeof(struct cpu_user_regs));
     BLANK();
diff -r 717f0dce76e7 -r 2324110ef2c6 xen/arch/x86/x86_64/asm-offsets.c
--- a/xen/arch/x86/x86_64/asm-offsets.c Sat Dec 22 10:27:26 2007 +0000
+++ b/xen/arch/x86/x86_64/asm-offsets.c Thu Dec 27 10:39:04 2007 +0000
@@ -46,11 +46,16 @@ void __dummy__(void)
     OFFSET(UREGS_rdi, struct cpu_user_regs, rdi);
     OFFSET(UREGS_error_code, struct cpu_user_regs, error_code);
     OFFSET(UREGS_entry_vector, struct cpu_user_regs, entry_vector);
+    OFFSET(UREGS_saved_upcall_mask, struct cpu_user_regs, saved_upcall_mask);
     OFFSET(UREGS_rip, struct cpu_user_regs, rip);
     OFFSET(UREGS_cs, struct cpu_user_regs, cs);
     OFFSET(UREGS_eflags, struct cpu_user_regs, eflags);
     OFFSET(UREGS_rsp, struct cpu_user_regs, rsp);
     OFFSET(UREGS_ss, struct cpu_user_regs, ss);
+    OFFSET(UREGS_ds, struct cpu_user_regs, ds);
+    OFFSET(UREGS_es, struct cpu_user_regs, es);
+    OFFSET(UREGS_fs, struct cpu_user_regs, fs);
+    OFFSET(UREGS_gs, struct cpu_user_regs, gs);
     OFFSET(UREGS_kernel_sizeof, struct cpu_user_regs, es);
     DEFINE(UREGS_user_sizeof, sizeof(struct cpu_user_regs));
     BLANK();

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] hvm: Register fields CS, DS, ES, FS, GS, SS, etc. are all undefined during, Xen patchbot-unstable <=