diff --git a/xen/arch/arm/domctl.c b/xen/arch/arm/domctl.c index 75c3df602a..6c9a3f9920 100644 --- a/xen/arch/arm/domctl.c +++ b/xen/arch/arm/domctl.c @@ -104,7 +104,7 @@ long arch_do_domctl(struct xen_domctl *domctl, struct domain *d, if ( rc ) return rc; - rc = xsm_bind_pt_irq(XSM_HOOK, d, bind); + rc = xsm_bind_pt_irq(XSM_DM_PRIV, d, bind); if ( rc ) return rc; @@ -140,7 +140,7 @@ long arch_do_domctl(struct xen_domctl *domctl, struct domain *d, if ( irq != virq ) return -EINVAL; - rc = xsm_unbind_pt_irq(XSM_HOOK, d, bind); + rc = xsm_unbind_pt_irq(XSM_DM_PRIV, d, bind); if ( rc ) return rc; diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c index 585a8a7601..77e612796f 100644 --- a/xen/arch/x86/domctl.c +++ b/xen/arch/x86/domctl.c @@ -568,7 +568,7 @@ long arch_do_domctl( if ( !is_hvm_domain(d) ) break; - ret = xsm_bind_pt_irq(XSM_HOOK, d, bind); + ret = xsm_bind_pt_irq(XSM_DM_PRIV, d, bind); if ( ret ) break; @@ -606,7 +606,7 @@ long arch_do_domctl( if ( !is_hvm_domain(d) ) break; - ret = xsm_unbind_pt_irq(XSM_HOOK, d, bind); + ret = xsm_unbind_pt_irq(XSM_DM_PRIV, d, bind); if ( ret ) break; diff --git a/xen/common/domctl.c b/xen/common/domctl.c index 3bd55e76f6..966e5dce7a 100644 --- a/xen/common/domctl.c +++ b/xen/common/domctl.c @@ -428,6 +428,8 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl) } case XEN_DOMCTL_ioport_mapping: + case XEN_DOMCTL_bind_pt_irq: + case XEN_DOMCTL_unbind_pt_irq: ret = arch_do_domctl(op, d, u_domctl); goto domctl_out_unlock_domonly; diff --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h index 8a2c48ec14..8d9eecd6af 100644 --- a/xen/include/xsm/dummy.h +++ b/xen/include/xsm/dummy.h @@ -168,12 +168,10 @@ static XSM_INLINE int cf_check xsm_domctl( switch ( cmd ) { case XEN_DOMCTL_bind_pt_irq: - case XEN_DOMCTL_unbind_pt_irq: - return xsm_default_action(XSM_DM_PRIV, current->domain, d); - case XEN_DOMCTL_getdomaininfo: case XEN_DOMCTL_ioport_mapping: case XEN_DOMCTL_memory_mapping: + case XEN_DOMCTL_unbind_pt_irq: ASSERT_UNREACHABLE(); return -EILSEQ; @@ -540,14 +538,14 @@ static XSM_INLINE int cf_check xsm_unmap_domain_pirq( static XSM_INLINE int cf_check xsm_bind_pt_irq( XSM_DEFAULT_ARG struct domain *d, struct xen_domctl_bind_pt_irq *bind) { - XSM_ASSERT_ACTION(XSM_HOOK); + XSM_ASSERT_ACTION(XSM_DM_PRIV); return xsm_default_action(action, current->domain, d); } static XSM_INLINE int cf_check xsm_unbind_pt_irq( XSM_DEFAULT_ARG struct domain *d, struct xen_domctl_bind_pt_irq *bind) { - XSM_ASSERT_ACTION(XSM_HOOK); + XSM_ASSERT_ACTION(XSM_DM_PRIV); return xsm_default_action(action, current->domain, d); } diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c index aaa42f083c..0695c0dcf4 100644 --- a/xen/xsm/flask/hooks.c +++ b/xen/xsm/flask/hooks.c @@ -681,9 +681,11 @@ static int cf_check flask_domctl(struct domain *d, unsigned int cmd, return avc_current_has_perm(ssidref, SECCLASS_DOMAIN, DOMAIN__CREATE, NULL); /* These have individual XSM hooks and don't make it here. */ + case XEN_DOMCTL_bind_pt_irq: case XEN_DOMCTL_getdomaininfo: case XEN_DOMCTL_ioport_mapping: case XEN_DOMCTL_memory_mapping: + case XEN_DOMCTL_unbind_pt_irq: ASSERT_UNREACHABLE(); return -EILSEQ; @@ -694,9 +696,6 @@ static int cf_check flask_domctl(struct domain *d, unsigned int cmd, case XEN_DOMCTL_set_target: case XEN_DOMCTL_vm_event_op: - /* These have individual XSM hooks (arch/../domctl.c) */ - case XEN_DOMCTL_bind_pt_irq: - case XEN_DOMCTL_unbind_pt_irq: #ifdef CONFIG_X86 /* These have individual XSM hooks (arch/x86/domctl.c) */ case XEN_DOMCTL_shadow_op: