[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v6 2/4] x86/hvm: Treat non-instruction fetch nested page faults also as read violations
As pointed out by Jan Beulich in http://lists.xen.org/archives/html/xen-devel/2014-08/msg01269.html: "Read-modify-write instructions absolutely need to be treated as read accesses, yet hardware doesn't guarantee to tell us so (they may surface as just write accesses)." This patch addresses the issue in both the VMX and the SVM side. VMX: Treat all non-instruction fetch violations as read violations (in addition to those that were already reported as read violations). SVM: Refine the handling to distinguish between read/write and instruction fetch access violations. Signed-off-by: Tamas K Lengyel <tamas.lengyel@xxxxxxxxxxxx> --- xen/arch/x86/hvm/svm/svm.c | 2 +- xen/arch/x86/hvm/vmx/vmx.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c index 1f72e19..9531248 100644 --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -1404,7 +1404,7 @@ static void svm_do_nested_pgfault(struct vcpu *v, struct p2m_domain *p2m = NULL; struct npfec npfec = { - .read_access = 1, /* All NPFs count as reads */ + .read_access = !(pfec & PFEC_insn_fetch), .write_access = !!(pfec & PFEC_write_access), .insn_fetch = !!(pfec & PFEC_insn_fetch) }; diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 656ce61..af0ad7c 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -2354,7 +2354,8 @@ static void ept_handle_violation(unsigned long qualification, paddr_t gpa) int ret; struct domain *d = current->domain; struct npfec npfec = { - .read_access = !!(qualification & EPT_READ_VIOLATION), + .read_access = !!(qualification & EPT_READ_VIOLATION) || + !(qualification & EPT_EXEC_VIOLATION), .write_access = !!(qualification & EPT_WRITE_VIOLATION), .insn_fetch = !!(qualification & EPT_EXEC_VIOLATION) }; -- 2.0.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |