aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/kexec_core.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kexec_core.c')
-rw-r--r--kernel/kexec_core.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c
index 23a83a4da38a..86ef06d3dbe3 100644
--- a/kernel/kexec_core.c
+++ b/kernel/kexec_core.c
@@ -471,6 +471,10 @@ static struct page *kimage_alloc_crash_control_pages(struct kimage *image,
471 } 471 }
472 } 472 }
473 473
474 /* Ensure that these pages are decrypted if SME is enabled. */
475 if (pages)
476 arch_kexec_post_alloc_pages(page_address(pages), 1 << order, 0);
477
474 return pages; 478 return pages;
475} 479}
476 480
@@ -867,6 +871,7 @@ static int kimage_load_crash_segment(struct kimage *image,
867 result = -ENOMEM; 871 result = -ENOMEM;
868 goto out; 872 goto out;
869 } 873 }
874 arch_kexec_post_alloc_pages(page_address(page), 1, 0);
870 ptr = kmap(page); 875 ptr = kmap(page);
871 ptr += maddr & ~PAGE_MASK; 876 ptr += maddr & ~PAGE_MASK;
872 mchunk = min_t(size_t, mbytes, 877 mchunk = min_t(size_t, mbytes,
@@ -884,6 +889,7 @@ static int kimage_load_crash_segment(struct kimage *image,
884 result = copy_from_user(ptr, buf, uchunk); 889 result = copy_from_user(ptr, buf, uchunk);
885 kexec_flush_icache_page(page); 890 kexec_flush_icache_page(page);
886 kunmap(page); 891 kunmap(page);
892 arch_kexec_pre_free_pages(page_address(page), 1);
887 if (result) { 893 if (result) {
888 result = -EFAULT; 894 result = -EFAULT;
889 goto out; 895 goto out;