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 <jbeulich@suse.com>
Acked-by: Daniel P. Smith <dpsmith@apertussolutions.com>
(cherry picked from commit 6bb83b1aa0)
This commit is contained in:
Jan Beulich authored and Andrew Cooper committed 2026-06-04 21:47:49 +01:00
1 parent 08afe7a8df
commit a5b7170c3b
5 files changed
+18 -1

No files matched your search

+1 -1
View File
@@ -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
+7
View File
@@ -579,6 +579,13 @@ static XSM_INLINE int cf_check xsm_iomem_mapping(
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)
+8
View File
@@ -117,6 +117,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);
@@ -504,6 +506,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)
+1
View File
@@ -72,6 +72,7 @@ static const struct xsm_ops __initconst_cf_clobber dummy_ops = {
.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,
+1
View File
@@ -1921,6 +1921,7 @@ static const struct xsm_ops __initconst_cf_clobber flask_ops = {
.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,
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.