[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] VT-d: Fix "else" vs "#endif" misplacement
commit cc6ba68edf6dcd18c3865e7d7c0f1ed822796426 Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Tue Jan 30 14:29:15 2024 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Jan 30 14:29:15 2024 +0100 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: 033ff90aa9c1 ("x86/P2M: p2m_{alloc,free}_ptp() and p2m_alloc_table() are HVM-only") Reported-by: Teddy Astie <teddy.astie@xxxxxxxxxx> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/arch/x86/include/asm/p2m.h | 9 ++++++++- xen/drivers/passthrough/vtd/iommu.c | 4 +--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/include/asm/p2m.h b/xen/arch/x86/include/asm/p2m.h index 32f3f394b0..6ada585eaa 100644 --- a/xen/arch/x86/include/asm/p2m.h +++ b/xen/arch/x86/include/asm/p2m.h @@ -435,7 +435,14 @@ static inline bool 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. diff --git a/xen/drivers/passthrough/vtd/iommu.c b/xen/drivers/passthrough/vtd/iommu.c index 99b642f12e..4244855032 100644 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -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 ) { -- generated by git-patchbot for /home/xen/git/xen.git#master
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |