Re: [PATCH v2 0/5] hibernation: make safe_copy_page more robust and remove debug_pagealloc support

From: Rafael J. Wysocki (Intel)

Date: Tue Sep 29 2026 - 07:55:55 EST


On Mon, Sep 28, 2026 at 12:02 AM Andrew Morton
<akpm@xxxxxxxxxxxxxxxxxxxx> wrote:
>
> On Sat, 26 Sep 2026 12:26:29 +0300 "Mike Rapoport (Microsoft)" <rppt@xxxxxxxxxx> wrote:
>
> > When hibernation creates a memory image, it uses set_direct_map() APIs to
> > temporarily map pages that are marked as not present in the kernel page
> > tables.
> >
> > Initially, this was intended to support debug_pagealloc along with
> > hibernation on x86.
> >
> > With the increasing desire to use set_direct_map APIs for hardening
> > features and with their inconsistent implementations across architectures,
> > using kernel_page_present() + set_direct_map_valid_noflush() to save
> > non-present pages in the hibernation image is not very safe, to say the
> > least.
> >
> > Worse, some combinations of debug features, such as debug_pagealloc and
> > PAGE_POISON cause a crash during restore.
> >
> > Keeping debug_pagealloc compatible with hibernation requires a complex
> > infrastructure for tracking free unmapped pages with a page flag/page type,
> > verifying that it is actually a free page that hibernate_map_page() tries
> > to remap and making sure there are no stale or failed page table updates.
> > With init_on_{alloc,free} and/or PAGE_POISON on top, this also requires the
> > ability to map and initialize these free pages on restore.
> >
> > This complexity does not seem justified for a somewhat niche debugging
> > scenario.
> >
> > Instead of a complex fix to support hibernation with debug_pagealloc, make
> > sure that copy_data_pages() and its helpers properly handle errors that may
> > happen during page table updates, explicitly enable saving of KFENCE pages
> > and disallow hibernation when debug_pagealloc is enabled.
>
> Thanks.
>
> > Mike Rapoport (Microsoft) (5):
> > hibernation: make swsusp_page helpers static
> > hibernation: ensure secretmem pages don't reach a snapshot
> > hibernate: handle potential errors in hibernate_{map,unmap}_page()
> > hibernation, KFENCE: explicitly map/unmap KFENCE pages
> > hibernation: make hibernation unavailable when debug_pagealloc is on
> >
> > include/linux/kfence.h | 29 ++++++++++
> > include/linux/suspend.h | 6 ---
> > kernel/power/hibernate.c | 6 +++
> > kernel/power/snapshot.c | 137 +++++++++++++++++++++++++----------------------
> > mm/kfence/core.c | 52 +++++++++++++++++-
> > 5 files changed, 159 insertions(+), 71 deletions(-)
>
> I'm not sure how to route this. Rafael, wdyt?

I don't have a strong preference.

If you decide to pick it up, please feel free to add my ACK to the
patches. Or if you prefer it to be picked up by me, please let me
know.

Thanks!