aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir@xen.org>2011-01-18 12:25:54 +0000
committerKeir Fraser <keir@xen.org>2011-01-18 12:25:54 +0000
commitadcc41a72a0425dc6280f2a8da92d8a9136128f8 (patch)
tree942670684c089572b278729cd62b3bcb09544a9a
parent649db76541d67b95b82e9c5316f4dead6344b37a (diff)
downloadxen-adcc41a72a0425dc6280f2a8da92d8a9136128f8.tar.gz
xen-adcc41a72a0425dc6280f2a8da92d8a9136128f8.tar.bz2
xen-adcc41a72a0425dc6280f2a8da92d8a9136128f8.zip
xen: fix XEN_DOMCTL_memory_mapping to not return with domain RCU lock held
Broken in 20358:ecc649ec3675 Signed-off-by: Ian Campbell <ian.campbell@citrix.com> xen-unstable changeset: 22775:e4688c57c230 xen-unstable date: Tue Jan 18 09:04:04 2011 +0000
-rw-r--r--xen/arch/x86/domctl.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
index 15554e26c5..60837c8e26 100644
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -962,15 +962,15 @@ long arch_do_domctl(
if ( (mfn + nr_mfns - 1) < mfn ) /* wrap? */
break;
- ret = -ESRCH;
- if ( unlikely((d = rcu_lock_domain_by_id(domctl->domain)) == NULL) )
- break;
-
ret = -EPERM;
if ( !IS_PRIV(current->domain) &&
!iomem_access_permitted(current->domain, mfn, mfn + nr_mfns - 1) )
break;
+ ret = -ESRCH;
+ if ( unlikely((d = rcu_lock_domain_by_id(domctl->domain)) == NULL) )
+ break;
+
ret=0;
if ( domctl->u.memory_mapping.add_mapping )
{