]> rtime.felk.cvut.cz Git - lisovros/linux_canprio.git/commit
PM / Hibernate: Fix memory corruption related to swap
authorRafael J. Wysocki <rjw@sisk.pl>
Fri, 3 Dec 2010 21:57:45 +0000 (22:57 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 9 Dec 2010 21:33:26 +0000 (13:33 -0800)
commit53e87163a135b1c868f31327c7f0b34feb605506
treef6d467a97da571be85986a9ed8387cb8f8a3e616
parent501bfbaead86ff24340ebddd5da338ec0562c969
PM / Hibernate: Fix memory corruption related to swap

commit c9e664f1fdf34aa8cede047b206deaa8f1945af0 upstream.

There is a problem that swap pages allocated before the creation of
a hibernation image can be released and used for storing the contents
of different memory pages while the image is being saved.  Since the
kernel stored in the image doesn't know of that, it causes memory
corruption to occur after resume from hibernation, especially on
systems with relatively small RAM that need to swap often.

This issue can be addressed by keeping the GFP_IOFS bits clear
in gfp_allowed_mask during the entire hibernation, including the
saving of the image, until the system is finally turned off or
the hibernation is aborted.  Unfortunately, for this purpose
it's necessary to rework the way in which the hibernate and
suspend code manipulates gfp_allowed_mask.

This change is based on an earlier patch from Hugh Dickins.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Reported-by: Ondrej Zary <linux@rainbow-software.org>
Acked-by: Hugh Dickins <hughd@google.com>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
include/linux/gfp.h
kernel/power/hibernate.c
kernel/power/suspend.c
kernel/power/user.c
mm/page_alloc.c