linux-stable/kernel/power
Andy Whitcroft 5ff5ed86e1 PM / hibernate: memory_bm_find_bit(): Tighten node optimisation
[ Upstream commit da6043fe85 ]

When looking for a bit by number we make use of the cached result from the
preceding lookup to speed up operation.  Firstly we check if the requested
pfn is within the cached zone and if not lookup the new zone.  We then
check if the offset for that pfn falls within the existing cached node.
This happens regardless of whether the node is within the zone we are
now scanning.  With certain memory layouts it is possible for this to
false trigger creating a temporary alias for the pfn to a different bit.
This leads the hibernation code to free memory which it was never allocated
with the expected fallout.

Ensure the zone we are scanning matches the cached zone before considering
the cached node.

Deep thanks go to Andrea for many, many, many hours of hacking and testing
that went into cornering this bug.

Reported-by: Andrea Righi <andrea.righi@canonical.com>
Tested-by: Andrea Righi <andrea.righi@canonical.com>
Signed-off-by: Andy Whitcroft <apw@canonical.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-01-12 11:24:11 +01:00
..
autosleep.c
console.c PM / sleep: Make pm_prepare_console() return void 2016-06-15 01:26:04 +02:00
hibernate.c x86/power: Fix 'nosmt' vs hibernation triple fault during resume 2019-06-11 12:22:48 +02:00
Kconfig PM / sleep: wakeup: Fix build error caused by missing SRCU support 2018-09-09 20:01:23 +02:00
main.c PM / sleep: enable suspend-to-idle even without registered suspend_ops 2016-09-13 02:17:19 +02:00
Makefile PM / Hibernate: Don't let kasan instrument snapshot.c 2016-06-14 00:38:56 +02:00
power.h x86/power: Fix swsusp_arch_resume prototype 2018-05-30 07:50:24 +02:00
poweroff.c
process.c sched/cpuset/pm: Fix cpuset vs. suspend-resume bugs 2017-10-12 11:51:25 +02:00
qos.c PM / QoS: avoid calling cancel_delayed_work_sync() during early boot 2016-09-05 15:07:53 +02:00
snapshot.c PM / hibernate: memory_bm_find_bit(): Tighten node optimisation 2020-01-12 11:24:11 +01:00
suspend.c PM / suspend: Fix missing KERN_CONT for suspend message 2016-10-24 14:38:02 +02:00
suspend_test.c PM / sleep: fix device reference leak in test_suspend 2016-11-02 05:10:04 +01:00
swap.c Power management material for v4.8-rc1 2016-07-26 17:29:07 -07:00
user.c PM / hibernate: Fix oops at snapshot_write() 2018-07-17 11:37:54 +02:00
wakelock.c PM / autosleep: Use workqueue for user space wakeup sources garbage collector 2015-07-14 21:04:48 +02:00