Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] Resource leaks (memory, kthreads, struct pid) on failure paths in DAMON sample modules.
--
--- Patch [1]: [PATCH 7.1.y] samples/damon/mtier: fail early if address range parameters are invalid ---
commit 999f01f2d7c2530ae577d445b6761ac7a2a10e77
Author: Zenghui Yu <[email protected]>
samples/damon/mtier: fail early if address range parameters are invalid
This commit prevents a WARN_ONCE() trigger in the damon mtier sample module
by validating that node{0,1}_{start,end}_addr specify a valid region
before passing them to damon_new_region().
Link: https://lore.kernel.org/[email protected]
> diff --git a/samples/damon/mtier.c b/samples/damon/mtier.c
> index 775838a23d935..7f84367ad3e58 100644
> --- a/samples/damon/mtier.c
> +++ b/samples/damon/mtier.c
> @@ -120,6 +120,9 @@ static struct damon_ctx *damon_sample_mtier_build_ctx(bool promote)
> addr.end = promote ? node1_end_addr : node0_end_addr;
> }
>
> + if (addr.start >= addr.end)
> + goto free_out;
> +
> region = damon_new_region(addr.start, addr.end);
> if (!region)
> goto free_out;
[Severity: High]
This is a pre-existing issue, but does damon_sample_mtier_start() leak memory
and running kthreads on failure?
Looking at samples/damon/mtier.c:damon_sample_mtier_start():
return damon_start(ctxs, 2, true);
If damon_start() succeeds for the first context but fails for the second, the
error is returned directly. This leaves the first context running
indefinitely, leaking both the damon_ctx objects and the started kthreads.
This would hold the damon core's exclusive flag, preventing future exclusive
monitoring on the system until reboot.
A similar issue appears in samples/damon/prcl.c:damon_sample_prcl_start():
err = damon_start(&ctx, 1, true);
if (err)
return err;
repeat_call_control.data = ctx;
return damon_call(ctx, &repeat_call_control);
And in samples/damon/wsse.c:damon_sample_wsse_start():
err = damon_start(&ctx, 1, true);
if (err)
return err;
repeat_call_control.data = ctx;
return damon_call(ctx, &repeat_call_control);
If damon_call() fails, the functions return the error immediately without
stopping the started threads or destroying the contexts. This also bypasses
damon_destroy_ctx(), leading to a struct pid reference leak.
--
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=1
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.