Commit 9d01f6f6 authored by Sandeep Dhavale's avatar Sandeep Dhavale Committed by Gao Xiang
Browse files

erofs: fix possible memory leak in z_erofs_gbuf_exit()



Because we incorrectly reused of variable `i` in `z_erofs_gbuf_exit()`
for inner loop, we may exit early from outer loop resulting in memory
leak. Fix this by using separate variable for iterating through inner loop.

Fixes: f36f3010 ("erofs: rename per-CPU buffers to global buffer pool and make it configurable")
Signed-off-by: default avatarSandeep Dhavale <dhavale@google.com>
Reviewed-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
Reviewed-by: default avatarChao Yu <chao@kernel.org>
Link: https://lore.kernel.org/r/20240624220206.3373197-1-dhavale@google.com


Signed-off-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
parent f2661062
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -148,7 +148,7 @@ int __init z_erofs_gbuf_init(void)

void z_erofs_gbuf_exit(void)
{
	int i;
	int i, j;

	for (i = 0; i < z_erofs_gbuf_count + (!!z_erofs_rsvbuf); ++i) {
		struct z_erofs_gbuf *gbuf = &z_erofs_gbufpool[i];
@@ -161,9 +161,9 @@ void z_erofs_gbuf_exit(void)
		if (!gbuf->pages)
			continue;

		for (i = 0; i < gbuf->nrpages; ++i)
			if (gbuf->pages[i])
				put_page(gbuf->pages[i]);
		for (j = 0; j < gbuf->nrpages; ++j)
			if (gbuf->pages[j])
				put_page(gbuf->pages[j]);
		kfree(gbuf->pages);
		gbuf->pages = NULL;
	}