When vc4_save_hang_state() encounters an early return condition, it
returns without freeing the previously allocated `kernel_state`,
leaking memory.

Add the missing kfree() calls in both early return paths.

Fixes: 214613656b51 ("drm/vc4: Add an interface for capturing the GPU state 
after a hang.")
Signed-off-by: Maíra Canal <[email protected]>
---
 drivers/gpu/drm/vc4/vc4_gem.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c
index 
ab16164b5edaf382b9c4bf1f08766748cac77fcc..f943ff7da28ae528c0fdfac76e989a2d5286d193
 100644
--- a/drivers/gpu/drm/vc4/vc4_gem.c
+++ b/drivers/gpu/drm/vc4/vc4_gem.c
@@ -172,6 +172,7 @@ vc4_save_hang_state(struct drm_device *dev)
        exec[1] = vc4_first_render_job(vc4);
        if (!exec[0] && !exec[1]) {
                spin_unlock_irqrestore(&vc4->job_lock, irqflags);
+               kfree(kernel_state);
                return;
        }
 
@@ -192,6 +193,7 @@ vc4_save_hang_state(struct drm_device *dev)
 
        if (!kernel_state->bo) {
                spin_unlock_irqrestore(&vc4->job_lock, irqflags);
+               kfree(kernel_state);
                return;
        }
 

-- 
2.52.0

Reply via email to