linux-stable/kernel/power
Brian Geffon d150294818 PM: hibernate: Clean up sync_read handling in snapshot_write_next()
commit d08970df19 upstream.

In snapshot_write_next(), sync_read is set and unset in three different
spots unnecessiarly. As a result there is a subtle bug where the first
page after the meta data has been loaded unconditionally sets sync_read
to 0. If this first PFN was actually a highmem page, then the returned
buffer will be the global "buffer," and the page needs to be loaded
synchronously.

That is, I'm not sure we can always assume the following to be safe:

	handle->buffer = get_buffer(&orig_bm, &ca);
	handle->sync_read = 0;

Because get_buffer() can call get_highmem_page_buffer() which can
return 'buffer'.

The easiest way to address this is just set sync_read before
snapshot_write_next() returns if handle->buffer == buffer.

Signed-off-by: Brian Geffon <bgeffon@google.com>
Fixes: 8357376d3d ("[PATCH] swsusp: Improve handling of highmem")
Cc: All applicable <stable@vger.kernel.org>
[ rjw: Subject and changelog edits ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-11-28 17:07:11 +00:00
..
autosleep.c PM: sleep: fix typos in comments 2021-04-08 19:37:21 +02:00
console.c
energy_model.c PM: EM: fix memory leak with using debugfs_lookup() 2023-03-10 09:33:53 +01:00
hibernate.c PM: hibernate: Do not get block device exclusively in test_resume mode 2023-05-11 23:03:38 +09:00
Kconfig pm/sleep: Add PM_USERSPACE_AUTOSLEEP Kconfig 2022-07-01 10:39:20 +02:00
main.c freezer,sched: Rewrite core freezer logic 2022-09-07 21:53:50 +02:00
Makefile PM: sleep: Narrow down -DDEBUG on kernel/power/ files 2022-04-13 16:34:01 +02:00
power.h PM: hibernate: Turn snapshot_test into global variable 2023-05-11 23:03:38 +09:00
poweroff.c kernel/power: constify sysrq_key_op 2020-05-15 14:53:20 +02:00
process.c PM: sleep: Avoid using pr_cont() in the tasks freezing code 2023-03-03 11:52:23 +01:00
qos.c PM: QoS: Restore support for default value on frequency QoS 2023-07-23 13:49:45 +02:00
snapshot.c PM: hibernate: Clean up sync_read handling in snapshot_write_next() 2023-11-28 17:07:11 +00:00
suspend.c Scheduler changes for v6.1: 2022-10-10 09:10:28 -07:00
suspend_test.c PM: suspend: fix return value of __setup handler 2022-03-01 18:55:07 +01:00
swap.c PM: hibernate: Do not get block device exclusively in test_resume mode 2023-05-11 23:03:38 +09:00
user.c freezer: Have {,un}lock_system_sleep() save/restore flags 2022-09-07 21:53:48 +02:00
wakelock.c PM: wakeup: simplify the output logic of pm_show_wakelocks() 2022-01-25 18:27:02 +01:00