summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHao Ge <hao.ge@linux.dev>2026-05-28 04:13:36 +0300
committerAndrew Morton <akpm@linux-foundation.org>2026-06-09 04:21:27 +0300
commit8f7275c174bc5bcc8fc1bec8024e2b3e6fe17f46 (patch)
tree3f0813b01ab3b1549004681515af3d43813a303a
parentd1aba985984781947ad67c1b44ac64bd498c8f27 (diff)
downloadlinux-8f7275c174bc5bcc8fc1bec8024e2b3e6fe17f46.tar.xz
lib/test_hmm: fix memory leak in dmirror_migrate_to_system()
Move the kvcalloc() calls after the early return checks to avoid leaking src_pfns and dst_pfns when end < start or mmget_not_zero() fails. Link: https://lore.kernel.org/20260528011336.20797-1-hao.ge@linux.dev Fixes: 775465fd26a3 ("lib/test_hmm: add zone device private THP test infrastructure") Signed-off-by: Hao Ge <hao.ge@linux.dev> Reviewed-by: Alistair Popple <apopple@nvidia.com> Reported-by: Sashiko <sashiko-bot@kernel.org> Reviewed-by: Balbir Singh <balbirs@nvidia.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Leon Romanovsky <leon@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r--lib/test_hmm.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/test_hmm.c b/lib/test_hmm.c
index 63bf77dee987..35f774ed2d99 100644
--- a/lib/test_hmm.c
+++ b/lib/test_hmm.c
@@ -1111,9 +1111,6 @@ static int dmirror_migrate_to_system(struct dmirror *dmirror,
unsigned long *src_pfns;
unsigned long *dst_pfns;
- src_pfns = kvcalloc(PTRS_PER_PTE, sizeof(*src_pfns), GFP_KERNEL | __GFP_NOFAIL);
- dst_pfns = kvcalloc(PTRS_PER_PTE, sizeof(*dst_pfns), GFP_KERNEL | __GFP_NOFAIL);
-
start = cmd->addr;
end = start + size;
if (end < start)
@@ -1123,6 +1120,9 @@ static int dmirror_migrate_to_system(struct dmirror *dmirror,
if (!mmget_not_zero(mm))
return -EINVAL;
+ src_pfns = kvcalloc(PTRS_PER_PTE, sizeof(*src_pfns), GFP_KERNEL | __GFP_NOFAIL);
+ dst_pfns = kvcalloc(PTRS_PER_PTE, sizeof(*dst_pfns), GFP_KERNEL | __GFP_NOFAIL);
+
cmd->cpages = 0;
mmap_read_lock(mm);
for (addr = start; addr < end; addr = next) {