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-3.1-testing] hvm: Register fields CS, DS, ES, FS, G

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-3.1-testing] hvm: Register fields CS, DS, ES, FS, GS, SS, etc. are all undefined during
From: "Xen patchbot-3.1-testing" <patchbot-3.1-testing@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 10 Jan 2008 06:30:19 -0800
Delivery-date: Thu, 10 Jan 2008 06:30:42 -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 1198792538 0
# Node ID 5e8068c541fc4123646150af21e175412cf962d2
# Parent  73f349c80f355f817e49f6e2897b3637f14fa109
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-unstable changeset:   16660:2324110ef2c6
xen-unstable date:        Thu Dec 27 10:39:04 2007 +0000
---
 xen/arch/x86/hvm/svm/x86_32/exits.S |   16 ++++++++++++++++
 xen/arch/x86/hvm/svm/x86_64/exits.S |   16 ++++++++++++++++
 xen/arch/x86/hvm/vmx/x86_32/exits.S |   18 +++++++++++++++++-
 xen/arch/x86/hvm/vmx/x86_64/exits.S |   17 +++++++++++++++++
 xen/arch/x86/x86_32/asm-offsets.c   |    1 +
 xen/arch/x86/x86_64/asm-offsets.c   |    5 +++++
 6 files changed, 72 insertions(+), 1 deletion(-)

diff -r 73f349c80f35 -r 5e8068c541fc xen/arch/x86/hvm/svm/x86_32/exits.S
--- a/xen/arch/x86/hvm/svm/x86_32/exits.S       Thu Dec 27 21:46:32 2007 +0000
+++ b/xen/arch/x86/hvm/svm/x86_32/exits.S       Thu Dec 27 21:55:38 2007 +0000
@@ -82,6 +82,22 @@ svm_trace_done:
         movl VMCB_rax(%ecx),%eax
         movl %eax,UREGS_eax(%esp)
 
+#ifndef NDEBUG
+        movl $0xdeadbeef,%eax
+        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)
+        movl %eax,UREGS_eflags(%esp)
+        movl %eax,UREGS_eip(%esp)
+        movl %eax,UREGS_esp(%esp)
+#endif
+
         STGI
 .globl svm_stgi_label;
 svm_stgi_label:
diff -r 73f349c80f35 -r 5e8068c541fc xen/arch/x86/hvm/svm/x86_64/exits.S
--- a/xen/arch/x86/hvm/svm/x86_64/exits.S       Thu Dec 27 21:46:32 2007 +0000
+++ b/xen/arch/x86/hvm/svm/x86_64/exits.S       Thu Dec 27 21:55:38 2007 +0000
@@ -101,6 +101,22 @@ svm_trace_done:
         movq VMCB_rax(%rcx),%rax
         movq %rax,UREGS_rax(%rsp)
 
+#ifndef NDEBUG
+        movl $0xdeadbeef,%eax
+        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)
+        movq %rax,UREGS_eflags(%rsp)
+        movq %rax,UREGS_rip(%rsp)
+        movq %rax,UREGS_rsp(%rsp)
+#endif
+
         STGI
 .globl svm_stgi_label;
 svm_stgi_label:
diff -r 73f349c80f35 -r 5e8068c541fc xen/arch/x86/hvm/vmx/x86_32/exits.S
--- a/xen/arch/x86/hvm/vmx/x86_32/exits.S       Thu Dec 27 21:46:32 2007 +0000
+++ b/xen/arch/x86/hvm/vmx/x86_32/exits.S       Thu Dec 27 21:55:38 2007 +0000
@@ -30,7 +30,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;                                                         \
@@ -51,6 +50,23 @@
         ALIGN
 ENTRY(vmx_asm_vmexit_handler)
         HVM_SAVE_ALL_NOSEGREGS
+
+#ifndef NDEBUG
+        movl $0xdeadbeef,%eax
+        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)
+        movl %eax,UREGS_eflags(%esp)
+        movl %eax,UREGS_eip(%esp)
+        movl %eax,UREGS_esp(%esp)
+#endif
+
         movl %esp,%eax
         push %eax
         call vmx_vmexit_handler
diff -r 73f349c80f35 -r 5e8068c541fc xen/arch/x86/hvm/vmx/x86_64/exits.S
--- a/xen/arch/x86/hvm/vmx/x86_64/exits.S       Thu Dec 27 21:46:32 2007 +0000
+++ b/xen/arch/x86/hvm/vmx/x86_64/exits.S       Thu Dec 27 21:55:38 2007 +0000
@@ -66,6 +66,23 @@
         ALIGN
 ENTRY(vmx_asm_vmexit_handler)
         HVM_SAVE_ALL_NOSEGREGS
+
+#ifndef NDEBUG
+        movl $0xdeadbeef,%eax
+        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)
+        movq %rax,UREGS_eflags(%rsp)
+        movq %rax,UREGS_rip(%rsp)
+        movq %rax,UREGS_rsp(%rsp)
+#endif
+
         movq %rsp,%rdi
         call vmx_vmexit_handler
         jmp vmx_asm_do_vmentry
diff -r 73f349c80f35 -r 5e8068c541fc xen/arch/x86/x86_32/asm-offsets.c
--- a/xen/arch/x86/x86_32/asm-offsets.c Thu Dec 27 21:46:32 2007 +0000
+++ b/xen/arch/x86/x86_32/asm-offsets.c Thu Dec 27 21:55:38 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 73f349c80f35 -r 5e8068c541fc xen/arch/x86/x86_64/asm-offsets.c
--- a/xen/arch/x86/x86_64/asm-offsets.c Thu Dec 27 21:46:32 2007 +0000
+++ b/xen/arch/x86/x86_64/asm-offsets.c Thu Dec 27 21:55:38 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-3.1-testing] hvm: Register fields CS, DS, ES, FS, GS, SS, etc. are all undefined during, Xen patchbot-3.1-testing <=