diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2020-01-23 11:10:21 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2020-01-23 11:10:21 -0800 |
commit | 3a83c8c81c91fe10e7002c2c0e74b23e80f41f28 (patch) | |
tree | 1a0c9636c5418730e5f1aeedf3c12f7cf6c6c880 /kernel | |
parent | a572582b1a4d6c8418739abfdfa5d1796d148d35 (diff) | |
parent | 18451f9f9e5810b8bd1245c5ae166f257e0e2b9d (diff) | |
download | linux-3a83c8c81c91fe10e7002c2c0e74b23e80f41f28.tar.gz linux-3a83c8c81c91fe10e7002c2c0e74b23e80f41f28.tar.bz2 linux-3a83c8c81c91fe10e7002c2c0e74b23e80f41f28.zip |
Merge tag 'pm-5.5-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull power management fix from Rafael Wysocki:
"Prevent the kernel from crashing during resume from hibernation if
free pages contain leftover data from the restore kernel and
init_on_free is set (Alexander Potapenko)"
* tag 'pm-5.5-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
PM: hibernate: fix crashes with init_on_free=1
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/power/snapshot.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c index 26b9168321e7..d65f2d5ab694 100644 --- a/kernel/power/snapshot.c +++ b/kernel/power/snapshot.c @@ -1147,24 +1147,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 */ } /** |