mirror of
https://github.com/torvalds/linux.git
synced 2026-06-06 05:27:07 +02:00
drm/i915: Fix a memory leak with reused mmap_offset
[ Upstream commit0220e4fe17] drm_vma_node_allow() and drm_vma_node_revoke() should be called in balanced pairs. We call drm_vma_node_allow() once per-file everytime a user calls mmap_offset, but only call drm_vma_node_revoke once per-file on each mmap_offset. As the mmap_offset is reused by the client, the per-file vm_count may remain non-zero and the rbtree leaked. Call drm_vma_node_allow_once() instead to prevent that memory leak. Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> Cc: Andi Shyti <andi.shyti@linux.intel.com> Signed-off-by: Nirmoy Das <nirmoy.das@intel.com> Fixes:7865559872("drm/i915/gem: Store mmap_offsets in an rbtree rather than a plain list") Reported-by: Chuansheng Liu <chuansheng.liu@intel.com> Reported-by: Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com> Link: https://lore.kernel.org/r/20230117175236.22317-2-nirmoy.das@intel.com Signed-off-by: Maxime Ripard <maxime@cerno.tech> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
67444f8ca3
commit
0bdc4b4ba7
|
|
@ -697,7 +697,7 @@ mmap_offset_attach(struct drm_i915_gem_object *obj,
|
|||
GEM_BUG_ON(lookup_mmo(obj, mmap_type) != mmo);
|
||||
out:
|
||||
if (file)
|
||||
drm_vma_node_allow(&mmo->vma_node, file);
|
||||
drm_vma_node_allow_once(&mmo->vma_node, file);
|
||||
return mmo;
|
||||
|
||||
err:
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user