mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
VT-d: Fix "else" vs "#endif" misplacement
In domain_pgd_maddr() the "#endif" is misplaced with respect to "else". This generates incorrect logic when CONFIG_HVM is compiled out, as the "else" body is executed unconditionally. Rework the logic to use IS_ENABLED() instead of explicit #ifdef-ary, as it's clearer to follow. This in turn involves adjusting p2m_get_pagetable() to compile when CONFIG_HVM is disabled. This is XSA-450 / CVE-2023-46840. Fixes:033ff90aa9("x86/P2M: p2m_{alloc,free}_ptp() and p2m_alloc_table() are HVM-only") Reported-by: Teddy Astie <teddy.astie@vates.tech> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> master commit:cc6ba68edfmaster date: 2024-01-30 14:29:15 +0100
This commit is contained in:
1 parent
637da04812
commit
c7ac596a57
2 files changed
+9
-4
No files matched your search
@@ -435,7 +435,14 @@ static inline bool_t p2m_is_altp2m(const struct p2m_domain *p2m)
|
||||
return p2m->p2m_class == p2m_alternate;
|
||||
}
|
||||
|
||||
#define p2m_get_pagetable(p2m) ((p2m)->phys_table)
|
||||
#ifdef CONFIG_HVM
|
||||
static inline pagetable_t p2m_get_pagetable(const struct p2m_domain *p2m)
|
||||
{
|
||||
return p2m->phys_table;
|
||||
}
|
||||
#else
|
||||
pagetable_t p2m_get_pagetable(const struct p2m_domain *p2m);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Ensure any deferred p2m TLB flush has been completed on all VCPUs.
|
||||
|
||||
@@ -438,15 +438,13 @@ static paddr_t domain_pgd_maddr(struct domain *d, paddr_t pgd_maddr,
|
||||
|
||||
if ( pgd_maddr )
|
||||
/* nothing */;
|
||||
#ifdef CONFIG_HVM
|
||||
else if ( iommu_use_hap_pt(d) )
|
||||
else if ( IS_ENABLED(CONFIG_HVM) && iommu_use_hap_pt(d) )
|
||||
{
|
||||
pagetable_t pgt = p2m_get_pagetable(p2m_get_hostp2m(d));
|
||||
|
||||
pgd_maddr = pagetable_get_paddr(pgt);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
if ( !hd->arch.vtd.pgd_maddr )
|
||||
{
|
||||
|
||||