From: Qi Zheng <qi.zheng@linux.dev>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: hannes@cmpxchg.org, hughd@google.com, mhocko@suse.com,
roman.gushchin@linux.dev, shakeel.butt@linux.dev,
muchun.song@linux.dev, david@kernel.org, ljs@kernel.org,
ziy@nvidia.com, harry.yoo@oracle.com, yosry.ahmed@linux.dev,
imran.f.khan@oracle.com, kamalesh.babulal@oracle.com,
axelrasmussen@google.com, yuanchu@google.com, weixugc@google.com,
chenridong@huaweicloud.com, mkoutny@suse.com,
hamzamahfooz@linux.microsoft.com, apais@linux.microsoft.com,
lance.yang@linux.dev, bhe@redhat.com, usamaarif642@gmail.com,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Qi Zheng <zhengqi.arch@bytedance.com>
Subject: Re: [PATCH v2 0/4] fix unexpected type conversions and potential overflows
Date: Thu, 26 Mar 2026 10:30:29 +0800 [thread overview]
Message-ID: <c95c2542-34df-435e-85e2-bc4e5346b65c@linux.dev> (raw)
In-Reply-To: <20260325165716.5d63522ba825f25a63e74e3e@linux-foundation.org>
On 3/26/26 7:57 AM, Andrew Morton wrote:
> On Wed, 25 Mar 2026 22:13:21 +0800 Qi Zheng <qi.zheng@linux.dev> wrote:
>
>> As Harry Yoo pointed out [1], in scenarios where massive state updates occur
>> (e.g., during the reparenting of LRU folios), the values passed to memcg stat
>> update functions can accumulate and exceed the upper limit of a 32-bit integer.
>>
>> If the parameter types are not large enough (like 'int') or are handled
>> incorrectly, it can lead to severe truncation, potential overflow issues,
>> and unexpected type conversion bugs.
>>
>> This series aims to address these issues by correcting the parameter types
>> in the relevant functions, and fixing an implicit conversion bug in
>> memcg_state_val_in_pages().
>
> Thanks. I'll add this to mm.git's mm-new branch.
>
> AI review
> (https://sashiko.dev/#/patchset/cover.1774447069.git.zhengqi.arch%40bytedance.com)
> still points at the problem in [2/4], now describing it as a bisection
> hole.
>
> In
> https://lkml.kernel.org/r/5fed0611-434c-4fd4-956c-39f23e0459a1@linux.dev
> you said you were going to address this by using abs(), and I see that
> being done in [4/4] so yup, runtime bisection hole.
Right.
>
> I'm inclined to mark this "don't care". But if we decide to backport
> [2/4] ("to prevent potential overflow issues") then we might have a
> problem.
>
> Also, if some downstream person decides to backport [2/4] into their
> kernel without [4/4] then they'll have a bad day.
As Harry Yoo pointed out:
```
Let's look at an example (assuming unit is 1).
val = val * unit = -16384 (-16 KiB)
val * unit / PAGE_SIZE = 0xFFFFFFFFFFFFC000 / PAGE_SIZE = 0x3FFFFFFFFFFFFF
max(0x3FFFFFFFFFFFFF, 1UL) = 0x3FFFFFFFFFF
Yeah, that's a massive positive number.
Hmm but how did it work when it was int?
val = val * unit = -16384 (-16KiB)
val * unit / PAGE_SIZE = 0xFFFFFFFFFFFFC000 / PAGE_SIZE = 0x3FFFFFFFFFFFFF
max(val * unit / PAGE_SIZE, 1UL) = 0x3FFFFFFFFFFFFF
(int)0x3FFFFFFFFFFFFF = 0xFFFFFFFF = (-1)
That's incorrect. It should have been -4?
```
this can already be an issue even without [2/4], and
[2/4] just amplify it.
Before LRU folio reparenting was introduced, we wouldn’t pass in such a
large value, so this wasn’t a problem. Since LRU folio reparenting is
still in mm-unstable, so I didn't add a Fixes tag in [4/4].
>
> So perhaps this issue should be addressed within [2/4]?
Because they fix different existing problems, I previously split them
into two patches.
However, since the issues are all quite minor, I feel that combining
them into a single patch is fine.
>> Actually I can trivially do this locally if you like - just turn [4/4]
i>> nto a -fix patch against [2/4], squash them together later on.
>>
>> Please lmk if you'd like me to do that.
That's fine, thank you!
next prev parent reply other threads:[~2026-03-26 2:30 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-25 14:13 [PATCH v2 0/4] fix unexpected type conversions and potential overflows Qi Zheng
2026-03-25 14:13 ` [PATCH v2 1/4] mm: memcontrol: correct the type of stats_updates to unsigned long Qi Zheng
2026-03-25 15:28 ` Lorenzo Stoakes (Oracle)
2026-03-26 2:32 ` Qi Zheng
2026-03-26 8:05 ` Lorenzo Stoakes (Oracle)
2026-03-26 8:19 ` Harry Yoo (Oracle)
2026-03-26 8:20 ` Qi Zheng
2026-03-25 14:13 ` [PATCH v2 2/4] mm: memcontrol: change val type to long in __mod_memcg_{lruvec_}state() Qi Zheng
2026-03-26 9:19 ` Lorenzo Stoakes (Oracle)
2026-03-26 14:37 ` David Laight
2026-03-27 2:37 ` Qi Zheng
2026-03-25 14:13 ` [PATCH v2 3/4] mm: memcontrol: correct the nr_pages parameter type of mem_cgroup_update_lru_size() Qi Zheng
2026-03-25 14:13 ` [PATCH v2 4/4] mm: memcontrol: fix unexpected massive positive number in memcg_state_val_in_pages() Qi Zheng
2026-03-26 9:16 ` Lorenzo Stoakes (Oracle)
2026-03-26 9:21 ` Lorenzo Stoakes (Oracle)
2026-03-26 9:32 ` Qi Zheng
2026-03-26 9:38 ` Lorenzo Stoakes (Oracle)
2026-03-27 0:06 ` Andrew Morton
2026-03-27 2:42 ` Qi Zheng
2026-03-27 3:13 ` Andrew Morton
2026-03-27 7:51 ` Lorenzo Stoakes (Oracle)
2026-03-25 14:24 ` [PATCH v2 0/4] fix unexpected type conversions and potential overflows Qi Zheng
2026-03-25 23:57 ` Andrew Morton
2026-03-26 0:28 ` Andrew Morton
2026-03-26 2:30 ` Qi Zheng [this message]
2026-03-26 3:27 ` Andrew Morton
2026-03-26 7:14 ` Michal Hocko
2026-03-26 7:51 ` Harry Yoo (Oracle)
2026-03-26 8:18 ` Michal Hocko
2026-03-26 9:22 ` Lorenzo Stoakes (Oracle)
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=c95c2542-34df-435e-85e2-bc4e5346b65c@linux.dev \
--to=qi.zheng@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=apais@linux.microsoft.com \
--cc=axelrasmussen@google.com \
--cc=bhe@redhat.com \
--cc=chenridong@huaweicloud.com \
--cc=david@kernel.org \
--cc=hamzamahfooz@linux.microsoft.com \
--cc=hannes@cmpxchg.org \
--cc=harry.yoo@oracle.com \
--cc=hughd@google.com \
--cc=imran.f.khan@oracle.com \
--cc=kamalesh.babulal@oracle.com \
--cc=lance.yang@linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mhocko@suse.com \
--cc=mkoutny@suse.com \
--cc=muchun.song@linux.dev \
--cc=roman.gushchin@linux.dev \
--cc=shakeel.butt@linux.dev \
--cc=usamaarif642@gmail.com \
--cc=weixugc@google.com \
--cc=yosry.ahmed@linux.dev \
--cc=yuanchu@google.com \
--cc=zhengqi.arch@bytedance.com \
--cc=ziy@nvidia.com \
/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.