[PATCH 3/3] rust: drm: gem: shmem: Do not free SG table of imported objects

From: Janne Grunau

Date: Mon Oct 26 2026 - 07:42:14 EST


GEM shmem objects imported through gem_prime_import_sg_table wrapping
drm_gem_shmem_prime_import_sg_table() do not own their SG table.
SGTableMap::drop() must not free it since it will be freed on exporter
side once the DMAbuf is not used anymore.

Fixes: 616c229ab010 ("rust: drm: gem: Introduce shmem::Object::sg_table()")
Cc: <stable+noautosel@xxxxxxxxxx> # no in-tree users
Signed-off-by: Janne Grunau <j@xxxxxxxxxx>
---
rust/kernel/drm/gem/shmem.rs | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/rust/kernel/drm/gem/shmem.rs b/rust/kernel/drm/gem/shmem.rs
index 1df3554893cc..d0f89ad2202f 100644
--- a/rust/kernel/drm/gem/shmem.rs
+++ b/rust/kernel/drm/gem/shmem.rs
@@ -596,9 +596,13 @@ impl<T: DriverObject> Drop for SGTableMap<T> {
fn drop(&mut self) {
// SAFETY: `obj` is always valid via our type invariants
let obj = unsafe { self.obj.as_ref() };
+ if obj.is_imported() {
+ return;
+ }
let _lock = DmaResvGuard::new(obj);

// SAFETY: We acquired the lock needed for calling this function above
+ // and the GEM object is not imported.
unsafe { bindings::__drm_gem_shmem_free_sgt_locked(obj.as_raw_shmem()) };
}
}

--
2.56.0