The merge order test creates an array and a chain as inputs to dma_fence_unwrap_merge(). The merge takes references to the underlying fences but does not consume the input containers. The success path only puts the merged result, leaking both the input array and the outer chain, which owns the inner chain.
Put the outer chain after checking the merged result and fall through to the existing array cleanup on success as well as failure.
The dma-buf-fence-unwrap KUnit suite passes all 11 tests under UML.
Fixes: b1cce631e61f ("dma-buf: add selftest for fence order after merge") Cc: stable@vger.kernel.org Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex Signed-off-by: Wentao Liang vulab@iscas.ac.cn --- drivers/dma-buf/st-dma-fence-unwrap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/dma-buf/st-dma-fence-unwrap.c b/drivers/dma-buf/st-dma-fence-unwrap.c index c5353b36f0e4..8115a721dc88 100644 --- a/drivers/dma-buf/st-dma-fence-unwrap.c +++ b/drivers/dma-buf/st-dma-fence-unwrap.c @@ -437,7 +437,7 @@ static void test_unwrap_merge_order(struct kunit *test) KUNIT_FAIL(test, "Not all fences seen!");
dma_fence_put(a2); - return; + dma_fence_put(c2);
error_put_a1: dma_fence_put(a1);