diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 2b1f7c887a..eb868ab738 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -568,7 +568,7 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg) else if ( IS_PRIV(current->domain) ) { d = find_domain_by_id(a.domid); - if ( !d ) + if ( d == NULL ) return -ESRCH; } else @@ -578,22 +578,24 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg) if ( op == HVMOP_set_param ) { - rc = 0; d->arch.hvm_domain.params[a.index] = a.value; + rc = 0; } else { - rc = d->arch.hvm_domain.params[a.index]; + a.value = d->arch.hvm_domain.params[a.index]; + rc = copy_to_guest(arg, &a, 1) ? -EFAULT : 0; } put_domain(d); - return rc; + break; } default: { DPRINTK("Bad HVM op %ld.\n", op); rc = -ENOSYS; + break; } }