Re: [PATCH v2] iommu/vt-d: Fix copied_tables bitmap leak on error in copy_translation_tables
Baolu Lu <[email protected]> Wed, 29 Jul 2026 13:37:41 +0800
| Newsgroups | dev.linux.lists.iommu,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 7/27/26 13:22, ZhaoJinming wrote: > The iommu->copied_tables bitmap was introduced by the IOMMU live > update series to track which context entries have been copied from > the previous kernel. The allocation via bitmap_zalloc() was added > inside copy_translation_tables(), but the error paths were not > updated to free it: > > 1. When old_rt_phys is 0 (invalid root table address) > 2. When memremap(old_rt_phys) fails > 3. When kcalloc for ctxt_tbls fails (goto out_unmap, which only > unmaps old_rt without releasing the bitmap) > > The bitmap is only cleaned up by free_dmar_iommu(), which is > called from the free_iommu error label in init_dmars(). However, > when copy_translation_tables() fails, init_dmars() does not jump > to free_iommu -- it logs the error, falls through, and continues > with the next IOMMU. As a result, copied_tables is leaked. > > Fix this by converting the two early returns to goto a new > err_free_bitmap label, and by making out_unmap fall through to > it so that the bitmap is always freed on any error path. The > success path performs memunmap(old_rt) inline and returns 0 > directly, since copied_tables must remain allocated for > subsequent use. > --- > > v2: > - On the success path, call memunmap(old_rt) before returning 0 > instead of returning directly, fixing a memunmap leak introduced > in v1. Suggested by Baolu Lu. > > Signed-off-by: ZhaoJinming<[email protected]> Your signed-off-by should be placed above the "---" line. > --- > drivers/iommu/intel/iommu.c | 19 +++++++++++++------ > 1 file changed, 13 insertions(+), 6 deletions(-) Queued for iommu/next with the above change applied manually. Thanks, baolu