diff options
author | Keir Fraser <keir@xen.org> | 2011-02-07 09:52:11 +0000 |
---|---|---|
committer | Keir Fraser <keir@xen.org> | 2011-02-07 09:52:11 +0000 |
commit | 462236bac932a5016dc0c2907054b5517a51728a (patch) | |
tree | f51fb78b3273172fde3b1f874d381a0b4346adba | |
parent | 78f17e33f3ca8f6d509595165729a8f3a1210322 (diff) | |
download | xen-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.c | 62 |
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; |