mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
VT-d: fix iommu_domain_destroy
Currently, g2m_ioport list and mapped_rmrrs always won't be released in iommu_domain_destroy, because the function returns before those code. It causes potential leak. This patch releases them, and thus avoid the potential leak. Signed-off-by: Weidong Han <Weidong.han@intel.com>
This commit is contained in:
1 parent
1c707e89c2
commit
07d20ae391
1 file changed
+10
-19
@@ -195,34 +195,25 @@ void iommu_domain_destroy(struct domain *d)
|
||||
if ( !iommu_enabled || !hd->platform_ops )
|
||||
return;
|
||||
|
||||
if ( !need_iommu(d) )
|
||||
return;
|
||||
|
||||
if ( need_iommu(d) )
|
||||
{
|
||||
d->need_iommu = 0;
|
||||
hd->platform_ops->teardown(d);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( hd )
|
||||
list_for_each_safe ( ioport_list, tmp, &hd->g2m_ioport_list )
|
||||
{
|
||||
list_for_each_safe ( ioport_list, tmp, &hd->g2m_ioport_list )
|
||||
{
|
||||
ioport = list_entry(ioport_list, struct g2m_ioport, list);
|
||||
list_del(&ioport->list);
|
||||
xfree(ioport);
|
||||
}
|
||||
|
||||
list_for_each_safe ( rmrr_list, tmp, &hd->mapped_rmrrs )
|
||||
{
|
||||
mrmrr = list_entry(rmrr_list, struct mapped_rmrr, list);
|
||||
list_del(&mrmrr->list);
|
||||
xfree(mrmrr);
|
||||
}
|
||||
ioport = list_entry(ioport_list, struct g2m_ioport, list);
|
||||
list_del(&ioport->list);
|
||||
xfree(ioport);
|
||||
}
|
||||
|
||||
return hd->platform_ops->teardown(d);
|
||||
list_for_each_safe ( rmrr_list, tmp, &hd->mapped_rmrrs )
|
||||
{
|
||||
mrmrr = list_entry(rmrr_list, struct mapped_rmrr, list);
|
||||
list_del(&mrmrr->list);
|
||||
xfree(mrmrr);
|
||||
}
|
||||
}
|
||||
|
||||
int iommu_map_page(struct domain *d, unsigned long gfn, unsigned long mfn)
|
||||
|
||||