fix issue of accessing supervisor page from ring3 in vmx guest
PATCH 1/1 fix issue of accessing supervisor page from ring3 in vmx guest
# HG changeset patch
# User Xiaofeng Ling <[email protected]>
# Node ID b832c9f342065a84991b4fbf0e30749225995228 # Parent ff879b0ac94170c3b1354fa5e297684ecffb834f Fix vmx guest issue of allowing accessing supervisor page from user level program.
In shadow fault, we need to check U/S bit in error code. It is just a fix for shadow32.c, for x86_64 code and public code, it is already handled.
xen/arch/x86/shadow32.c +20 -0
@@ -2693,6 +2693,16 @@domain_crash_synchronous (); } +/* uer runlevel to access vilation error in guest? */ +if (unlikely ((regs->error_code &4 ) && + !(l1e_get_flags (gpte) & _PAGE_USER))) + { +SH_VVLOG ("shadow_fault - EXIT: wr fault on super page (%" PRIpte")" , +l1e_get_intpte (gpte)); + goto fail; + + } +if (unlikely (!l1pte_write_fault (v, &gpte, &spte, va)) ) {SH_VVLOG ("shadow_fault - EXIT: l1pte_write_fault failed" );
@@ -2706,6 +2716,16 @@ }else { +/* protection violation error(read) in guest? */ +if (unlikely ((regs->error_code &1 ) )) + { +SH_VVLOG ("shadow_fault - EXIT: read fault on super page (%" PRIpte")" , +l1e_get_intpte (gpte)); + goto fail; + + } + +if ( !l1pte_read_fault (d, &gpte, &spte) ) {SH_VVLOG ("shadow_fault - EXIT: l1pte_read_fault failed" );
# HG changeset patch
# User Xiaofeng Ling <[email protected]>
# Node ID b832c9f342065a84991b4fbf0e30749225995228 # Parent ff879b0ac94170c3b1354fa5e297684ecffb834f Fix vmx guest issue of allowing accessing supervisor page from user level program.
In shadow fault, we need to check U/S bit in error code. It is just a fix for shadow32.c, for x86_64 code and public code, it is already handled.
xen/arch/x86/shadow32.c +20 -0
@@ -2693,6 +2693,16 @@domain_crash_synchronous (); } +/* uer runlevel to access vilation error in guest? */ +if (unlikely ((regs->error_code &4 ) && + !(l1e_get_flags (gpte) & _PAGE_USER))) + { +SH_VVLOG ("shadow_fault - EXIT: wr fault on super page (%" PRIpte")" , +l1e_get_intpte (gpte)); + goto fail; + + } +if (unlikely (!l1pte_write_fault (v, &gpte, &spte, va)) ) {SH_VVLOG ("shadow_fault - EXIT: l1pte_write_fault failed" );
@@ -2706,6 +2716,16 @@ }else { +/* protection violation error(read) in guest? */ +if (unlikely ((regs->error_code &1 ) )) + { +SH_VVLOG ("shadow_fault - EXIT: read fault on super page (%" PRIpte")" , +l1e_get_intpte (gpte)); + goto fail; + + } + +if ( !l1pte_read_fault (d, &gpte, &spte) ) {SH_VVLOG ("shadow_fault - EXIT: l1pte_read_fault failed" );
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel