From: sashiko-bot@kernel.org
To: "SJ Park" <sj@kernel.org>
Cc: damon@lists.linux.dev
Subject: Re: [PATCH 6/7] mm/damon/core: handle extreme memory state in get_node_memcg_used_bp()
Date: Tue, 01 Sep 2026 13:46:50 +0000 [thread overview]
Message-ID: <20260901134651.5F2EB1F00A3D@smtp.kernel.org> (raw)
In-Reply-To: <20260901131326.97615-7-sj@kernel.org>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] 32-bit integer overflow in `mult_frac()` leads to wildly inaccurate quota calculations on architectures with 32-bit unsigned longs.
--
commit f507259fcccb65ad40eabec53de3e020582667f6
Author: SJ Park <sj@kernel.org>
mm/damon/core: handle extreme memory state in get_node_memcg_used_bp()
In extreme unlikely situations, total memory might be zero. In less
extreme but still very unlikely situations, lruvec_page_state() calls
might let the caller show used memory larger than total memory. In the
two cases, damos_get_node_memcg_used_bp() could cause division by zero,
or return underflowed value, respectively. Handle the cases by
respectively returning 100% and 0% for used and free memory queries in
the corner cases.
Link: https://lore.kernel.org/20260329154813.47382-1-sj@kernel.org
> diff --git a/mm/damon/core.c b/mm/damon/core.c
> index 32cde20de2792..6288bb3b09e65 100644
> --- a/mm/damon/core.c
> +++ b/mm/damon/core.c
> @@ -2853,6 +2853,12 @@ static unsigned long damos_get_node_memcg_used_bp(
> mem_cgroup_put(memcg);
>
> si_meminfo_node(&i, goal->nid);
> + if (!i.totalram || i.totalram < used_pages) {
> + if (goal->metric == DAMOS_QUOTA_NODE_MEMCG_USED_BP)
> + return 10000;
> + else /* DAMOS_QUOTA_NODE_MEMCG_FREE_BP */
> + return 0;
> + }
> if (goal->metric == DAMOS_QUOTA_NODE_MEMCG_USED_BP)
> numerator = used_pages;
> else /* DAMOS_QUOTA_NODE_MEMCG_FREE_BP */
> numerator = i.totalram - used_pages;
> return mult_frac(numerator, 10000, i.totalram);
[Severity: High]
This is a pre-existing issue, but does this calculation overflow on 32-bit
architectures?
The mult_frac(numerator, 10000, i.totalram) macro computes
numerator * 10000 / i.totalram when the numerator is smaller than the
totalram. Because numerator is an unsigned long, this multiplication is
performed using 32-bit arithmetic on 32-bit architectures.
If the numerator exceeds roughly 429,496 pages (about 1.7 gigabytes of
memory), multiplying it by 10,000 exceeds the 32-bit integer maximum of
roughly 4.29 billion. This wraparound yields a massively inaccurate fraction.
This same overflow appears to also affect damos_get_node_mem_bp() and
damos_get_in_active_mem_bp().
Could numerator be cast to a 64-bit type before multiplication to prevent
this issue on larger memory systems with 32-bit kernels?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260901131326.97615-1-sj@kernel.org?part=6
next prev parent reply other threads:[~2026-09-01 13:46 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-01 13:13 [PATCH 0/7] damos_apply_scheme() splits a region and apply the action to the SJ Park
2026-09-01 13:13 ` [PATCH 1/7] mm/damon/paddr: respect folio end for DAMOS_STAT SJ Park
2026-09-01 13:23 ` sashiko-bot
2026-09-01 13:13 ` [PATCH 2/7] mm/damon/paddr: respect folio end for DAMOS actions except STAT SJ Park
2026-09-01 13:22 ` sashiko-bot
2026-09-01 13:13 ` [PATCH 3/7] mm/damon/vaddr: respect folio end for DAMOS_STAT SJ Park
2026-09-01 13:33 ` sashiko-bot
2026-09-01 13:13 ` [PATCH 4/7] mm/damon/vaddr: respect folio end for DAMOS_MIGRATE_{HOT,COLD} SJ Park
2026-09-01 13:32 ` sashiko-bot
2026-09-01 13:13 ` [PATCH 5/7] mm/damon/core: handle extreme memory state in damon_get_node_mem_bp() SJ Park
2026-09-01 13:41 ` sashiko-bot
2026-09-01 13:13 ` [PATCH 6/7] mm/damon/core: handle extreme memory state in get_node_memcg_used_bp() SJ Park
2026-09-01 13:46 ` sashiko-bot [this message]
2026-09-01 13:13 ` [PATCH 7/7] mm/damon/core: handle extreme memory state in get_in_active_mem_bp() SJ Park
2026-09-01 13:56 ` sashiko-bot
2026-09-01 13:16 ` [PATCH 0/7] damos_apply_scheme() splits a region and apply the action to the SJ Park
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260901134651.5F2EB1F00A3D@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=damon@lists.linux.dev \
--cc=sashiko-reviews@lists.linux.dev \
--cc=sj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.