aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir@xen.org>2011-02-07 09:52:11 +0000
committerKeir Fraser <keir@xen.org>2011-02-07 09:52:11 +0000
commit462236bac932a5016dc0c2907054b5517a51728a (patch)
treef51fb78b3273172fde3b1f874d381a0b4346adba
parent78f17e33f3ca8f6d509595165729a8f3a1210322 (diff)
downloadxen-462236bac932a5016dc0c2907054b5517a51728a.tar.gz
xen-462236bac932a5016dc0c2907054b5517a51728a.tar.bz2
xen-462236bac932a5016dc0c2907054b5517a51728a.zip
hvm_op: Clean up hvm_op() target domain lockign using rcu_lock_remote_target_domain_by_id().
Signed-off-by: Keir Fraser <keir@xen.org>
-rw-r--r--xen/arch/x86/hvm/hvm.c62
1 files changed, 17 insertions, 45 deletions
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 8f9ad267bd..51cde88e24 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -2828,13 +2828,9 @@ static int hvmop_set_pci_intx_level(
if ( (op.domain > 0) || (op.bus > 0) || (op.device > 31) || (op.intx > 3) )
return -EINVAL;
- d = rcu_lock_domain_by_id(op.domid);
- if ( d == NULL )
- return -ESRCH;
-
- rc = -EPERM;
- if ( !IS_PRIV_FOR(current->domain, d) )
- goto out;
+ rc = rcu_lock_remote_target_domain_by_id(op.domid, &d);
+ if ( rc != 0 )
+ return rc;
rc = -EINVAL;
if ( !is_hvm_domain(d) )
@@ -2997,13 +2993,9 @@ static int hvmop_set_isa_irq_level(
if ( op.isa_irq > 15 )
return -EINVAL;
- d = rcu_lock_domain_by_id(op.domid);
- if ( d == NULL )
- return -ESRCH;
-
- rc = -EPERM;
- if ( !IS_PRIV_FOR(current->domain, d) )
- goto out;
+ rc = rcu_lock_remote_target_domain_by_id(op.domid, &d);
+ if ( rc != 0 )
+ return rc;
rc = -EINVAL;
if ( !is_hvm_domain(d) )
@@ -3045,13 +3037,9 @@ static int hvmop_set_pci_link_route(
if ( (op.link > 3) || (op.isa_irq > 15) )
return -EINVAL;
- d = rcu_lock_domain_by_id(op.domid);
- if ( d == NULL )
- return -ESRCH;
-
- rc = -EPERM;
- if ( !IS_PRIV_FOR(current->domain, d) )
- goto out;
+ rc = rcu_lock_remote_target_domain_by_id(op.domid, &d);
+ if ( rc != 0 )
+ return rc;
rc = -EINVAL;
if ( !is_hvm_domain(d) )
@@ -3261,11 +3249,11 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg)
case HVM_PARAM_MEMORY_EVENT_CR0:
case HVM_PARAM_MEMORY_EVENT_CR3:
case HVM_PARAM_MEMORY_EVENT_CR4:
- if ( d->domain_id == current->domain->domain_id )
+ if ( d == current->domain )
rc = -EPERM;
break;
case HVM_PARAM_MEMORY_EVENT_INT3:
- if ( d->domain_id == current->domain->domain_id )
+ if ( d == current->domain )
{
rc = -EPERM;
break;
@@ -3348,7 +3336,7 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg)
if ( copy_from_guest(&a, arg, 1) )
return -EFAULT;
- rc = rcu_lock_target_domain_by_id(a.domid, &d);
+ rc = rcu_lock_remote_target_domain_by_id(a.domid, &d);
if ( rc != 0 )
return rc;
@@ -3388,7 +3376,7 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg)
if ( copy_from_guest(&a, arg, 1) )
return -EFAULT;
- rc = rcu_lock_target_domain_by_id(a.domid, &d);
+ rc = rcu_lock_remote_target_domain_by_id(a.domid, &d);
if ( rc != 0 )
return rc;
@@ -3457,14 +3445,10 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg)
if ( copy_from_guest(&a, arg, 1) )
return -EFAULT;
- rc = rcu_lock_target_domain_by_id(a.domid, &d);
+ rc = rcu_lock_remote_target_domain_by_id(a.domid, &d);
if ( rc != 0 )
return rc;
- rc = -EPERM;
- if ( d == current->domain )
- goto param_fail4;
-
rc = -EINVAL;
if ( !is_hvm_domain(d) )
goto param_fail4;
@@ -3548,14 +3532,10 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg)
if ( copy_from_guest(&a, arg, 1) )
return -EFAULT;
- rc = rcu_lock_target_domain_by_id(a.domid, &d);
+ rc = rcu_lock_remote_target_domain_by_id(a.domid, &d);
if ( rc != 0 )
return rc;
- rc = -EPERM;
- if ( d == current->domain )
- goto param_fail5;
-
rc = -EINVAL;
if ( !is_hvm_domain(d) )
goto param_fail5;
@@ -3627,14 +3607,10 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg)
if ( copy_from_guest(&a, arg, 1) )
return -EFAULT;
- rc = rcu_lock_target_domain_by_id(a.domid, &d);
+ rc = rcu_lock_remote_target_domain_by_id(a.domid, &d);
if ( rc != 0 )
return rc;
- rc = -EPERM;
- if ( d == current->domain )
- goto param_fail6;
-
rc = -EINVAL;
if ( !is_hvm_domain(d) )
goto param_fail6;
@@ -3729,14 +3705,10 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg)
if ( copy_from_guest(&tr, arg, 1 ) )
return -EFAULT;
- rc = rcu_lock_target_domain_by_id(tr.domid, &d);
+ rc = rcu_lock_remote_target_domain_by_id(tr.domid, &d);
if ( rc != 0 )
return rc;
- rc = -EPERM;
- if ( d == current->domain )
- goto param_fail8;
-
rc = -EINVAL;
if ( !is_hvm_domain(d) )
goto param_fail8;