Messages in this thread | | | Subject | Re: [PATCH v3 2/2] dma-mapping: Fix dma_pgprot() for unencrypted coherent pages | From | Tom Lendacky <> | Date | Mon, 16 Mar 2020 14:44:14 -0500 |
| |
On 3/4/20 5:45 AM, Thomas Hellström (VMware) wrote: > From: Thomas Hellstrom <thellstrom@vmware.com> > > When dma_mmap_coherent() sets up a mapping to unencrypted coherent memory > under SEV encryption and sometimes under SME encryption, it will actually > set up an encrypted mapping rather than an unencrypted, causing devices > that DMAs from that memory to read encrypted contents. Fix this. > > When force_dma_unencrypted() returns true, the linear kernel map of the > coherent pages have had the encryption bit explicitly cleared and the > page content is unencrypted. Make sure that any additional PTEs we set > up to these pages also have the encryption bit cleared by having > dma_pgprot() return a protection with the encryption bit cleared in this > case. > > Cc: Dave Hansen <dave.hansen@linux.intel.com> > Cc: Andy Lutomirski <luto@kernel.org> > Cc: Peter Zijlstra <peterz@infradead.org> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Ingo Molnar <mingo@redhat.com> > Cc: Borislav Petkov <bp@alien8.de> > Cc: "H. Peter Anvin" <hpa@zytor.com> > Cc: Christoph Hellwig <hch@infradead.org> > Cc: Christian König <christian.koenig@amd.com> > Cc: Marek Szyprowski <m.szyprowski@samsung.com> > Cc: Tom Lendacky <thomas.lendacky@amd.com> > Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Acked-by: Tom Lendacky <thomas.lendacky@amd.com>
> --- > kernel/dma/mapping.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c > index 12ff766ec1fa..98e3d873792e 100644 > --- a/kernel/dma/mapping.c > +++ b/kernel/dma/mapping.c > @@ -154,6 +154,8 @@ EXPORT_SYMBOL(dma_get_sgtable_attrs); > */ > pgprot_t dma_pgprot(struct device *dev, pgprot_t prot, unsigned long attrs) > { > + if (force_dma_unencrypted(dev)) > + prot = pgprot_decrypted(prot); > if (dev_is_dma_coherent(dev) || > (IS_ENABLED(CONFIG_DMA_NONCOHERENT_CACHE_SYNC) && > (attrs & DMA_ATTR_NON_CONSISTENT))) >
| |