Message ID | 20210209152816.15792-3-julien@xen.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | xen/iommu: Collection of bug fixes for IOMMU teadorwn | expand |
> -----Original Message----- > From: Julien Grall <julien@xen.org> > Sent: 09 February 2021 15:28 > To: xen-devel@lists.xenproject.org > Cc: hongyxia@amazon.co.uk; iwj@xenproject.org; Julien Grall <jgrall@amazon.com>; Jan Beulich > <jbeulich@suse.com>; Paul Durrant <paul@xen.org> > Subject: [for-4.15][PATCH v2 2/5] xen/iommu: Check if the IOMMU was initialized before tearing down > > From: Julien Grall <jgrall@amazon.com> > > is_iommu_enabled() will return true even if the IOMMU has not been > initialized (e.g. the ops are not set). > > In the case of an early failure in arch_domain_init(), the function > iommu_destroy_domain() will be called even if the IOMMU is not > initialized. > > This will result to dereference the ops which will be NULL and an host > crash. > > Fix the issue by checking that ops has been set before accessing it. > > Fixes: 71e617a6b8f6 ("use is_iommu_enabled() where appropriate...") > Signed-off-by: Julien Grall <jgrall@amazon.com> Reviewed-by: Paul Durrant <paul@xen.org>
Hi Paul, On 09/02/2021 20:22, Paul Durrant wrote: >> -----Original Message----- >> From: Julien Grall <julien@xen.org> >> Sent: 09 February 2021 15:28 >> To: xen-devel@lists.xenproject.org >> Cc: hongyxia@amazon.co.uk; iwj@xenproject.org; Julien Grall <jgrall@amazon.com>; Jan Beulich >> <jbeulich@suse.com>; Paul Durrant <paul@xen.org> >> Subject: [for-4.15][PATCH v2 2/5] xen/iommu: Check if the IOMMU was initialized before tearing down >> >> From: Julien Grall <jgrall@amazon.com> >> >> is_iommu_enabled() will return true even if the IOMMU has not been >> initialized (e.g. the ops are not set). >> >> In the case of an early failure in arch_domain_init(), the function >> iommu_destroy_domain() will be called even if the IOMMU is not >> initialized. >> >> This will result to dereference the ops which will be NULL and an host >> crash. >> >> Fix the issue by checking that ops has been set before accessing it. >> >> Fixes: 71e617a6b8f6 ("use is_iommu_enabled() where appropriate...") >> Signed-off-by: Julien Grall <jgrall@amazon.com> > > Reviewed-by: Paul Durrant <paul@xen.org> Thanks! Ian gave his Release-Acked-by so I will commit this patch now. Cheers,
diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c index 2358b6eb09f4..879d238bcd31 100644 --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -221,6 +221,13 @@ static void iommu_teardown(struct domain *d) { struct domain_iommu *hd = dom_iommu(d); + /* + * During early domain creation failure, we may reach here with the + * ops not yet initialized. + */ + if ( !hd->platform_ops ) + return; + iommu_vcall(hd->platform_ops, teardown, d); }