]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/i915/gt: Fix memory leak in hangcheck selftest
authorJonathan Cavitt <jonathan.cavitt@intel.com>
Thu, 4 Sep 2025 19:30:42 +0000 (19:30 +0000)
committerAndi Shyti <andi.shyti@linux.intel.com>
Tue, 9 Sep 2025 15:58:19 +0000 (17:58 +0200)
In active_engines, if intel_context_create fails, we need to go
backwards through all the created contexts to free/put them.  However,
the way this is currently performed skips the first created context, as
if count == 1, then --count returns 0 and exits the while-loop
prematurely without performing the intel_context_put on context 0.

Fix this by post-decrementing count in the while-loop, rather than
pre-decrementing it.  This change makes the prior guard against count
underflowing unnecessary, as the while-loop exits when count == 0.

Signed-off-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
Cc: Krzysztof Karas <krzysztof.karas@intel.com>
Cc: Andi Shyti <andi.shyti@linux.intel.com>
Cc: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com>
Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
Link: https://lore.kernel.org/r/20250904193041.12888-2-jonathan.cavitt@intel.com
drivers/gpu/drm/i915/gt/selftest_hangcheck.c

index 619c70c54ef9dce9df8637b01e4af3d0e7c1e1bb..4f252f7049757836fe047aca8fcab2d23ccb11d5 100644 (file)
@@ -904,9 +904,7 @@ static void active_engine(struct kthread_work *work)
                        arg->result = PTR_ERR(ce[count]);
                        pr_err("[%s] Create context #%ld failed: %d!\n",
                               engine->name, count, arg->result);
-                       if (!count)
-                               return;
-                       while (--count)
+                       while (count--)
                                intel_context_put(ce[count]);
                        return;
                }