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:
Keir Fraser committed 2010-01-04 09:06:36 +00:00
1 parent 1c707e89c2
commit 07d20ae391
1 file changed
+10 -19
+10 -19
View File
@@ -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)
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.