]> xenbits.xensource.com Git - people/vhanquez/xen.git/commitdiff
x86/mm: Check sharing/paging/access have been enabled before processing a memop
authorAndres Lagar-Cavilla <andres@lagarcavilla.org>
Thu, 16 Feb 2012 15:43:02 +0000 (15:43 +0000)
committerAndres Lagar-Cavilla <andres@lagarcavilla.org>
Thu, 16 Feb 2012 15:43:02 +0000 (15:43 +0000)
Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Acked-by: Tim Deegan <tim@xen.org>
Committed-by: Tim Deegan <tim@xen.org>
xen/arch/x86/mm/mem_access.c
xen/arch/x86/mm/mem_event.c
xen/arch/x86/mm/mem_paging.c
xen/arch/x86/mm/mem_sharing.c

index 94a4c30f0489510ea75c2bdf98f91b572c0751f5..a08416c40e914d7b91ebc85117f28f006be6ee7a 100644 (file)
@@ -29,6 +29,9 @@ int mem_access_memop(struct domain *d, xen_mem_event_op_t *meo)
 {
     int rc;
 
+    if ( unlikely(!d->mem_event->access.ring_page) )
+        return -ENODEV;
+
     switch( meo->op )
     {
     case XENMEM_access_op_resume:
index 138fcdfdf61d25f61e62bcdf0bad9515c750558c..3b2267adfbeb1e655f1331e12189f0a0b6fe2d0d 100644 (file)
@@ -452,13 +452,15 @@ int mem_event_claim_slot(struct domain *d, struct mem_event_domain *med)
 /* Registered with Xen-bound event channel for incoming notifications. */
 static void mem_paging_notification(struct vcpu *v, unsigned int port)
 {
-    p2m_mem_paging_resume(v->domain);
+    if ( likely(v->domain->mem_event->paging.ring_page != NULL) )
+        p2m_mem_paging_resume(v->domain);
 }
 
 /* Registered with Xen-bound event channel for incoming notifications. */
 static void mem_access_notification(struct vcpu *v, unsigned int port)
 {
-    p2m_mem_access_resume(v->domain);
+    if ( likely(v->domain->mem_event->access.ring_page != NULL) )
+        p2m_mem_access_resume(v->domain);
 }
 
 struct domain *get_mem_event_op_target(uint32_t domain, int *rc)
index 4fdf3d74b8f7b4c10e6a3979891f7a102450f9bb..6cf9b385b0be314d900138765382ed93597b63a9 100644 (file)
@@ -27,6 +27,9 @@
 
 int mem_paging_memop(struct domain *d, xen_mem_event_op_t *mec)
 {
+    if ( unlikely(!d->mem_event->paging.ring_page) )
+        return -ENODEV;
+
     switch( mec->op )
     {
     case XENMEM_paging_op_nominate:
index 36a50e58d48fbea79e4a87e6b7774095f5982701..b73d48827f7fa3b81188bcdd0c451f1034faca4a 100644 (file)
@@ -1022,7 +1022,7 @@ int mem_sharing_memop(struct domain *d, xen_mem_sharing_op_t *mec)
     int rc = 0;
 
     /* Only HAP is supported */
-    if ( !hap_enabled(d) )
+    if ( !hap_enabled(d) || !d->arch.hvm_domain.mem_sharing_enabled )
          return -ENODEV;
 
     switch(mec->op)