[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <7e86e2f0-e581-4772-b468-1da04a214f07@kernel.org>
Date: Mon, 9 Feb 2026 20:46:06 +0100
From: "David Hildenbrand (Arm)" <david@...nel.org>
To: Mikhail Gavrilov <mikhail.v.gavrilov@...il.com>, linux-mm@...ck.org
Cc: akpm@...ux-foundation.org, vbabka@...e.cz, surenb@...gle.com,
mhocko@...e.com, jackmanb@...gle.com, hannes@...xchg.org, ziy@...dia.com,
npiggin@...il.com, linux-kernel@...r.kernel.org, kasong@...cent.com,
hughd@...gle.com, chrisl@...nel.org, ryncsn@...il.com,
stable@...r.kernel.org, willy@...radead.org
Subject: Re: [PATCH v3] mm/page_alloc: clear page->private in
free_pages_prepare()
On 2/7/26 18:36, Mikhail Gavrilov wrote:
> Several subsystems (slub, shmem, ttm, etc.) use page->private but don't
> clear it before freeing pages. When these pages are later allocated as
> high-order pages and split via split_page(), tail pages retain stale
> page->private values.
>
> This causes a use-after-free in the swap subsystem. The swap code uses
> page->private to track swap count continuations, assuming freshly
> allocated pages have page->private == 0. When stale values are present,
> swap_count_continued() incorrectly assumes the continuation list is valid
> and iterates over uninitialized page->lru containing LIST_POISON values,
> causing a crash:
>
> KASAN: maybe wild-memory-access in range [0xdead000000000100-0xdead000000000107]
> RIP: 0010:__do_sys_swapoff+0x1151/0x1860
>
> Fix this by clearing page->private in free_pages_prepare(), ensuring all
> freed pages have clean state regardless of previous use.
>
> Fixes: 3b8000ae185c ("mm/vmalloc: huge vmalloc backing pages should be split rather than compound")
> Cc: stable@...r.kernel.org
> Suggested-by: Zi Yan <ziy@...dia.com>
> Acked-by: Zi Yan <ziy@...dia.com>
> Signed-off-by: Mikhail Gavrilov <mikhail.v.gavrilov@...il.com>
> ---
Okay, let's do this as a fix, and cleanup the page->private handling
separately.
Thanks!
Acked-by: David Hildenbrand (Arm) <david@...nel.org>
--
Cheers,
David
Powered by blists - more mailing lists