Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mm, swap: fix memory leak in setup_clusters() error path

Patch series "mm: swap: small fixes and comment cleanups", v2.

This series provides a few small fixes and cleanups for the swap code.

The first patch fixes a memory leak in an error path that was recently
introduced. The subsequent patches include minor logic adjustments and
the removal of redundant comments.


This patch (of 5):

setup_clusters() could leak 'cluster_info' memory if an error occurred on
a path that did not jump to the 'err_free' label.

This patch simplifies the error handling by removing the goto label and
instead calling free_cluster_info() on all error exit paths.

The new logic is safe, as free_cluster_info() already handles NULL pointer
inputs.

Link: https://lkml.kernel.org/r/20251031065011.40863-1-youngjun.park@lge.com
Link: https://lkml.kernel.org/r/20251031065011.40863-2-youngjun.park@lge.com
Fixes: 07adc4cf1ecd ("mm, swap: implement dynamic allocation of swap table")
Signed-off-by: Youngjun Park <youngjun.park@lge.com>
Reviewed-by: Kairui Song <kasong@tencent.com>
Reviewed-by: Baoquan He <bhe@redhat.com>
Cc: Barry Song <baohua@kernel.org>
Cc: Chris Li <chrisl@kernel.org>
Cc: Kemeng Shi <shikemeng@huaweicloud.com>
Cc: Nhat Pham <nphamcs@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Youngjun Park and committed by
Andrew Morton
cb65082a c2307195

+2 -3
+2 -3
mm/swapfile.c
··· 3330 3330 si->global_cluster = kmalloc(sizeof(*si->global_cluster), 3331 3331 GFP_KERNEL); 3332 3332 if (!si->global_cluster) 3333 - goto err_free; 3333 + goto err; 3334 3334 for (i = 0; i < SWAP_NR_ORDERS; i++) 3335 3335 si->global_cluster->next[i] = SWAP_ENTRY_INVALID; 3336 3336 spin_lock_init(&si->global_cluster_lock); ··· 3383 3383 } 3384 3384 3385 3385 return cluster_info; 3386 - err_free: 3387 - free_cluster_info(cluster_info, maxpages); 3388 3386 err: 3387 + free_cluster_info(cluster_info, maxpages); 3389 3388 return ERR_PTR(err); 3390 3389 } 3391 3390