]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
mm/khugepaged: avoid underflow in madvise_collapse for sub-PMD MADV_COLLAPSE
authorChen Wandun <chenwandun@lixiang.com>
Wed, 13 May 2026 05:54:28 +0000 (13:54 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 21 Jun 2026 18:37:31 +0000 (11:37 -0700)
commitb89a641056227403bf54847caf228b8a607c5fc4
tree47401f8f768268f55333e021a1ad36149b8813e9
parent08de77b1c99fd2311526e362d7f4500a322da51f
mm/khugepaged: avoid underflow in madvise_collapse for sub-PMD MADV_COLLAPSE

madvise_collapse() computes the THP-aligned window:

    hstart = ALIGN(start, HPAGE_PMD_SIZE);  /* round up */
    hend = ALIGN_DOWN(end, HPAGE_PMD_SIZE); /* round down */

The following case will cause hstart > hend, and result in underflow in
the return statement, avoid it by returning zero early when hstart > hend.
The return value is due to input is valid to madvise(), and there is
nothing to collapse.

    madvise(PMD-aligned + PAGE_SIZE, PAGE_SIZE, MADV_COLLAPSE);

In addition, kmalloc_obj(), mmgrab() and lru_add_drain_all() are
unnecessary when hstart == hend, so skip these operations by returning
early too.

Link: https://lore.kernel.org/20260513055428.1664898-1-chenwandun@lixiang.com
Signed-off-by: Chen Wandun <chenwandun@lixiang.com>
Acked-by: David Hildenbrand (Arm) <david@kernel.org>
Reviewed-by: Lorenzo Stoakes <ljs@kernel.org>
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: Barry Song <baohua@kernel.org>
Cc: Dev Jain <dev.jain@arm.com>
Cc: Lance Yang <lance.yang@linux.dev>
Cc: Liam R. Howlett <liam@infradead.org>
Cc: Nico Pache <npache@redhat.com>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Zi Yan <ziy@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/khugepaged.c