Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1697765
| From | Ingo Molnar <mingo@kernel.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: [PATCH v1 1/2] x86/mm, kexec: Fix memory corruption with SME on successive kexecs |
| Date | 2017-07-27 09:20 +0200 |
| Message-ID | <u7Lfs-37f-11@gated-at.bofh.it> (permalink) |
| References | <u7Lfs-37f-13@gated-at.bofh.it> <u7Lfs-37f-15@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
* Tom Lendacky <thomas.lendacky@amd.com> wrote: > After issuing successive kexecs it was found that the SHA hash failed > verification when booting the kexec'd kernel. When SME is enabled, the > change from using pages that were marked encrypted to now being marked as > not encrypted (through new identify mapped page tables) results in memory > corruption if there are any cache entries for the previously encrypted > pages. This is because separate cache entries can exist for the same > physical location but tagged both with and without the encryption bit. > > To prevent this, issue a wbinvd before copying the pages from the source > location to the destination location to clear any possible cache entry > conflicts. > > Cc: <kexec@lists.infradead.org> > Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> > --- > arch/x86/kernel/relocate_kernel_64.S | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/arch/x86/kernel/relocate_kernel_64.S b/arch/x86/kernel/relocate_kernel_64.S > index 98111b3..c11d8bc 100644 > --- a/arch/x86/kernel/relocate_kernel_64.S > +++ b/arch/x86/kernel/relocate_kernel_64.S > @@ -132,6 +132,13 @@ identity_mapped: > /* Flush the TLB (needed?) */ > movq %r9, %cr3 > > + /* > + * If SME is/was active, there could be old encrypted cache line > + * entries that will conflict with the now unencrypted memory > + * used by kexec. Flush the caches before copying the kernel. > + */ > + wbinvd WBINVD is very expensive IIRC - several milliseconds. So if we change the page table from encrypted to unencrypted we need to do a full cache flush sounds pretty broken to me - how can then this be done via an API such as mmap() without executing WBINVD? Thanks, Ingo
Back to linux.kernel | Previous | Next — Next in thread | Find similar | Unroll thread
Re: [PATCH v1 1/2] x86/mm, kexec: Fix memory corruption with SME on successive kexecs Ingo Molnar <mingo@kernel.org> - 2017-07-27 09:20 +0200 Re: [PATCH v1 1/2] x86/mm, kexec: Fix memory corruption with SME on successive kexecs Linus Torvalds <torvalds@linux-foundation.org> - 2017-07-27 19:40 +0200
csiph-web