mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
drm/radeon: fix memory leak in radeon_ring_restore() on lock failure
radeon_ring_restore() takes ownership of the data buffer allocated by
radeon_ring_backup(). The caller (radeon_gpu_reset()) only frees it in
the non-restore branch; in the restore branch it relies on
radeon_ring_restore() to free it.
If radeon_ring_lock() fails, the function returned early without calling
kvfree(data), leaking the ring backup buffer on every GPU reset that
fails at the lock stage. During repeated GPU resets this causes
cumulative kernel memory exhaustion.
Free data before returning the error.
Fixes: 55d7c22192 ("drm/radeon: implement ring saving on reset v4")
Signed-off-by: Yuho Choi <dbgh9129@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
ce3b24eb3e
commit
82f1d60426
|
|
@ -356,8 +356,10 @@ int radeon_ring_restore(struct radeon_device *rdev, struct radeon_ring *ring,
|
|||
|
||||
/* restore the saved ring content */
|
||||
r = radeon_ring_lock(rdev, ring, size);
|
||||
if (r)
|
||||
if (r) {
|
||||
kvfree(data);
|
||||
return r;
|
||||
}
|
||||
|
||||
for (i = 0; i < size; ++i) {
|
||||
radeon_ring_write(ring, data[i]);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user