summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorVenkata Rao Kakani <vkakani@codeaurora.org>2018-11-22 10:40:14 +0530
committerVenkata Rao Kakani <vkakani@codeaurora.org>2018-11-22 15:07:57 +0530
commit98f28a19f7ae1bcbbe341553fab067fcee40b6bc (patch)
tree3df9bd8e6015a3fa4190b395e4c93dab4f31b36a /kernel
parent84da71b286d535c81a57346f12d94dadf4b55cbe (diff)
hibernation: msm: arm64: avoid swap image header corruption
Avoid swap image header corruption based on golden_image boot argument. Change-Id: If15408b79cf4ff1d04af9a0abb9bfac603a3e569 Signed-off-by: Venkata Rao Kakani <vkakani@codeaurora.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/power/swap.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/kernel/power/swap.c b/kernel/power/swap.c
index 160e1006640d..1a2efc07c1d0 100644
--- a/kernel/power/swap.c
+++ b/kernel/power/swap.c
@@ -36,6 +36,7 @@
#define HIBERNATE_SIG "S1SUSPEND"
+static int goldenimage;
/*
* When reading an {un,}compressed image, we may restore pages in place,
* in which case some architectures need these pages cleaning before they
@@ -1531,7 +1532,13 @@ int swsusp_check(void)
goto put;
if (!memcmp(HIBERNATE_SIG, swsusp_header->sig, 10)) {
- memcpy(swsusp_header->sig, swsusp_header->orig_sig, 10);
+ if (!goldenimage) {
+ pr_debug("PM: corrupt hibernate image header\n");
+ memcpy(swsusp_header->sig,
+ swsusp_header->orig_sig, 10);
+ } else {
+ pr_debug("PM: Header corruption avoided\n");
+ }
/* Reset swap signature now */
error = hib_submit_io(WRITE_SYNC, swsusp_resume_block,
swsusp_header, NULL);
@@ -1605,3 +1612,10 @@ static int swsusp_header_init(void)
}
core_initcall(swsusp_header_init);
+
+static int __init golden_image_setup(char *str)
+{
+ goldenimage = 1;
+ return 1;
+}
+__setup("golden_image", golden_image_setup);