From: Honglei Huang <honghuan@amd.com>
To: <matthew.brost@intel.com>, <rodrigo.vivi@intel.com>,
<thomas.hellstrom@linux.intel.com>, <dakr@kernel.org>,
<intel-xe@lists.freedesktop.org>
Cc: <Ray.Huang@amd.com>, <dri-devel@lists.freedesktop.org>,
<honghuan@amd.com>
Subject: [PATCH v4 0/3] drm/gpusvm: fix IOVA/DMA unmap leaks in __drm_gpusvm_unmap_pages()
Date: Wed, 1 Jul 2026 14:27:57 +0800 [thread overview]
Message-ID: <20260701062800.409248-1-honghuan@amd.com> (raw)
Three small fixes for the IOVA/DMA unmap path in
__drm_gpusvm_unmap_pages() and the get_pages() error path, all spotted by
AI review:
- Free the whole IOVA reservation on unmap. In a mixed range only the
system pages are linked, so freeing just the linked part leaks the
IOVA reserved for the device pages. Unlink the linked portion and
free the whole reservation. On the get_pages() error path
state_offset is 0, so skip the unlink, also avoiding the
uninitialised dma_addr[0].dir read, allocate dma_addr with the
zeroing kvzalloc_objs().
- Do not route system pages to device_unmap() on the IOVA path. Branch
off addr->proto so only real device pages reach device_unmap().
- Publish dpagemap early to avoid leaking device mappings on the
get_pages() error path. It was only stored on success, so a mid-way
failure left svm_pages->dpagemap NULL and skipped device_unmap().
Assign it when the first device page is mapped.
All three issues are preexisting and independent of the gpusvm MM/device
state split series; they were surfaced by the AI review of that series,
so this series addresses them separately.
V4:
- Add reviewed-by for Matt's review.
V3:
- Add fixes for all patches, add Cc stable.
- Add reviewed by in patch 1.
- Move AI review note into commit message instead of reported by.
V2:
- patch 1: extend the uninitialized dma_addr[0].dir fix into freeing
the whole IOVA reservation, fixing the IOVA leak for mixed ranges
(the earlier version only guarded the direction argument).
- add patch 3: publish dpagemap early to fix the device-mapping leak on
the get_pages() error path.
Honglei Huang (3):
drm/gpusvm: free the whole IOVA reservation on unmap
drm/gpusvm: do not route system pages to device_unmap() on IOVA unmap
drm/gpusvm: publish dpagemap early to avoid device mapping leak on
error
drivers/gpu/drm/drm_gpusvm.c | 53 +++++++++++++++++++++++++-----------
1 file changed, 37 insertions(+), 16 deletions(-)
--
2.34.1
next reply other threads:[~2026-07-01 6:28 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-01 6:27 Honglei Huang [this message]
2026-07-01 6:27 ` [PATCH v4 1/3] drm/gpusvm: free the whole IOVA reservation on unmap Honglei Huang
2026-07-01 6:27 ` [PATCH v4 2/3] drm/gpusvm: do not route system pages to device_unmap() on IOVA unmap Honglei Huang
2026-07-01 6:28 ` [PATCH v4 3/3] drm/gpusvm: publish dpagemap early to avoid device mapping leak on error Honglei Huang
2026-07-01 6:38 ` ✓ CI.KUnit: success for drm/gpusvm: fix IOVA/DMA unmap leaks in __drm_gpusvm_unmap_pages() (rev3) Patchwork
2026-07-01 7:30 ` ✓ Xe.CI.BAT: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260701062800.409248-1-honghuan@amd.com \
--to=honghuan@amd.com \
--cc=Ray.Huang@amd.com \
--cc=dakr@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=matthew.brost@intel.com \
--cc=rodrigo.vivi@intel.com \
--cc=thomas.hellstrom@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox