From: Jan Beulich Subject: XSM/Flask: split the .iomem_mapping() hook It's used twice in entirely different situations. The use in do_domctl() wants to become an ordinary XSM_DM_PRIV invocation, while the one in vPCI code need to remain XSM_HOOK (it may plausibly become XSM_TARGET). For Flask, the same backing function will continue to be used for the time being. This is part of XSA-492. Signed-off-by: Jan Beulich Acked-by: Daniel P. Smith --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -67,7 +67,7 @@ static int cf_check map_range( return -EPERM; } - rc = xsm_iomem_mapping(XSM_HOOK, map->d, map_mfn, m_end, map->map); + rc = xsm_iomem_mapping_vpci(XSM_HOOK, map->d, map_mfn, m_end, map->map); if ( rc ) { printk(XENLOG_G_WARNING --- a/xen/include/xsm/dummy.h +++ b/xen/include/xsm/dummy.h @@ -579,6 +579,13 @@ static XSM_INLINE int cf_check xsm_iomem return xsm_default_action(action, current->domain, d); } +static XSM_INLINE int cf_check xsm_iomem_mapping_vpci( + XSM_DEFAULT_ARG struct domain *d, uint64_t s, uint64_t e, uint8_t allow) +{ + XSM_ASSERT_ACTION(XSM_HOOK); + return xsm_default_action(action, current->domain, d); +} + static XSM_INLINE int cf_check xsm_pci_config_permission( XSM_DEFAULT_ARG struct domain *d, uint32_t machine_bdf, uint16_t start, uint16_t end, uint8_t access) --- a/xen/include/xsm/xsm.h +++ b/xen/include/xsm/xsm.h @@ -116,6 +116,8 @@ struct xsm_ops { uint8_t allow); int (*iomem_mapping)(struct domain *d, uint64_t s, uint64_t e, uint8_t allow); + int (*iomem_mapping_vpci)(struct domain *d, uint64_t s, uint64_t e, + uint8_t allow); int (*pci_config_permission)(struct domain *d, uint32_t machine_bdf, uint16_t start, uint16_t end, uint8_t access); @@ -503,6 +505,12 @@ static inline int xsm_iomem_mapping( return alternative_call(xsm_ops.iomem_mapping, d, s, e, allow); } +static inline int xsm_iomem_mapping_vpci( + xsm_default_t def, struct domain *d, uint64_t s, uint64_t e, uint8_t allow) +{ + return alternative_call(xsm_ops.iomem_mapping_vpci, d, s, e, allow); +} + static inline int xsm_pci_config_permission( xsm_default_t def, struct domain *d, uint32_t machine_bdf, uint16_t start, uint16_t end, uint8_t access) --- a/xen/xsm/dummy.c +++ b/xen/xsm/dummy.c @@ -72,6 +72,7 @@ static const struct xsm_ops __initconst_ .irq_permission = xsm_irq_permission, .iomem_permission = xsm_iomem_permission, .iomem_mapping = xsm_iomem_mapping, + .iomem_mapping_vpci = xsm_iomem_mapping_vpci, .pci_config_permission = xsm_pci_config_permission, .get_vnumainfo = xsm_get_vnumainfo, --- a/xen/xsm/flask/hooks.c +++ b/xen/xsm/flask/hooks.c @@ -1932,6 +1932,7 @@ static const struct xsm_ops __initconst_ .irq_permission = flask_irq_permission, .iomem_permission = flask_iomem_permission, .iomem_mapping = flask_iomem_mapping, + .iomem_mapping_vpci = flask_iomem_mapping, .pci_config_permission = flask_pci_config_permission, .resource_plug_core = flask_resource_plug_core,