]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/nouveau/acr: fix missing nvkm_done() in error path of nvkm_acr_oneinit()
authorWentao Liang <vulab@iscas.ac.cn>
Sat, 6 Jun 2026 15:56:06 +0000 (15:56 +0000)
committerDanilo Krummrich <dakr@kernel.org>
Sun, 21 Jun 2026 13:06:01 +0000 (15:06 +0200)
In nvkm_acr_oneinit(), nvkm_kmap(acr->wpr) is invoked unconditionally
at line 309 to obtain a mapping reference. Additionally, when both
acr->wpr_fw and acr->wpr_comp are present, a second nvkm_kmap() is
called inside the conditional block. Both mappings are expected to be
released by nvkm_done(acr->wpr) at line 320 before the function returns
successfully.

However, when a mismatch is detected during the loop within the
conditional block, the function returns -EINVAL at line 318 without
calling nvkm_done(). This results in a leak of the kmap reference(s)
acquired earlier.

Fix the issue by invoking nvkm_done(acr->wpr) prior to the early return
to ensure proper release of the mapping references.

Fixes: 22dcda45a3d1 ("drm/nouveau/acr: implement new subdev to replace "secure boot"")
Cc: stable@vger.kernel.org
Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
Link: https://patch.msgid.link/20260606155606.77593-1-vulab@iscas.ac.cn
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.c

index 4c7745cd6ae522cc7bd138a5a76afe50c4cdfca6..7fd967a2554f9aa8ef813f38b1b2b0aa48de48d3 100644 (file)
@@ -315,6 +315,7 @@ nvkm_acr_oneinit(struct nvkm_subdev *subdev)
                                          i, us, fw);
                        }
                }
+               nvkm_done(acr->wpr);
                return -EINVAL;
        }
        nvkm_done(acr->wpr);