diff -r b5f20f7ac2b3 xen/arch/x86/domctl.c --- a/xen/arch/x86/domctl.c Fri Sep 26 17:12:56 2008 +0100 +++ b/xen/arch/x86/domctl.c Sat Sep 27 17:55:44 2008 +0800 @@ -620,13 +620,13 @@ long arch_do_domctl( if ( !iommu_enabled ) break; + ret = xsm_test_assign_device(domctl->u.assign_device.machine_bdf); + if ( ret ) + break; + ret = -EINVAL; bus = (domctl->u.assign_device.machine_bdf >> 16) & 0xff; devfn = (domctl->u.assign_device.machine_bdf >> 8) & 0xff; - - ret = xsm_test_assign_device(domctl->u.assign_device.machine_bdf); - if ( ret ) - break; if ( device_assigned(bus, devfn) ) { @@ -670,6 +670,7 @@ long arch_do_domctl( break; } + ret = -EINVAL; if ( device_assigned(bus, devfn) ) { gdprintk(XENLOG_ERR, "XEN_DOMCTL_assign_device: " @@ -751,6 +752,7 @@ long arch_do_domctl( if ( ret ) goto bind_out; + ret = -ESRCH; if ( iommu_enabled ) ret = pt_irq_create_bind_vtd(d, bind); if ( ret < 0 )