Skip to content

Commit

Permalink
UPSTREAM: PM: hibernate: fix crashes with init_on_free=1
Browse files Browse the repository at this point in the history
Upon resuming from hibernation, free pages may contain stale data from
the kernel that initiated the resume. This breaks the invariant
inflicted by init_on_free=1 that freed pages must be zeroed.

To deal with this problem, make clear_free_pages() also clear the free
pages when init_on_free is enabled.

Fixes: 6471384af2a6 ("mm: security: introduce init_on_alloc=1 and init_on_free=1 boot options")
Reported-by: Johannes Stezenbach <js@sig21.net>
Signed-off-by: Alexander Potapenko <glider@google.com>
Cc: 5.3+ <stable@vger.kernel.org> # 5.3+
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
(cherry picked from commit 18451f9f9e5810b8bd1245c5ae166f257e0e2b9d)
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I32c22a60082bb3b49eae7de3c7d9d5ae2b965dc5
  • Loading branch information
ramosian-glider authored and gregkh committed Nov 16, 2020
1 parent 4c4abbc commit b8dc994
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions kernel/power/snapshot.c
Original file line number Diff line number Diff line change
Expand Up @@ -1145,24 +1145,24 @@ void free_basic_memory_bitmaps(void)

void clear_free_pages(void)
{
#ifdef CONFIG_PAGE_POISONING_ZERO
struct memory_bitmap *bm = free_pages_map;
unsigned long pfn;

if (WARN_ON(!(free_pages_map)))
return;

memory_bm_position_reset(bm);
pfn = memory_bm_next_pfn(bm);
while (pfn != BM_END_OF_MAP) {
if (pfn_valid(pfn))
clear_highpage(pfn_to_page(pfn));

if (IS_ENABLED(CONFIG_PAGE_POISONING_ZERO) || want_init_on_free()) {
memory_bm_position_reset(bm);
pfn = memory_bm_next_pfn(bm);
while (pfn != BM_END_OF_MAP) {
if (pfn_valid(pfn))
clear_highpage(pfn_to_page(pfn));

pfn = memory_bm_next_pfn(bm);
}
memory_bm_position_reset(bm);
pr_info("free pages cleared after restore\n");
}
memory_bm_position_reset(bm);
pr_info("free pages cleared after restore\n");
#endif /* PAGE_POISONING_ZERO */
}

/**
Expand Down

0 comments on commit b8dc994

Please sign in to comment.