On Thu, Jun 23, 2022 at 04:44:12PM +0100, Catalin Marinas wrote: > From: Will Deacon <will@xxxxxxxxxx> > > commit c50f11c6196f45c92ca48b16a5071615d4ae0572 upstream. > > Invalidating the buffer memory in arch_sync_dma_for_device() for > FROM_DEVICE transfers > > When using the streaming DMA API to map a buffer prior to inbound > non-coherent DMA (i.e. DMA_FROM_DEVICE), we invalidate any dirty CPU > cachelines so that they will not be written back during the transfer and > corrupt the buffer contents written by the DMA. This, however, poses two > potential problems: > > (1) If the DMA transfer does not write to every byte in the buffer, > then the unwritten bytes will contain stale data once the transfer > has completed. > > (2) If the buffer has a virtual alias in userspace, then stale data > may be visible via this alias during the period between performing > the cache invalidation and the DMA writes landing in memory. > > Address both of these issues by cleaning (aka writing-back) the dirty > lines in arch_sync_dma_for_device(DMA_FROM_DEVICE) instead of discarding > them using invalidation. > > Cc: Ard Biesheuvel <ardb@xxxxxxxxxx> > Cc: Christoph Hellwig <hch@xxxxxx> > Cc: Robin Murphy <robin.murphy@xxxxxxx> > Cc: Russell King <linux@xxxxxxxxxxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> > Link: https://lore.kernel.org/r/20220606152150.GA31568@willie-the-truck > Signed-off-by: Will Deacon <will@xxxxxxxxxx> > Reviewed-by: Ard Biesheuvel <ardb@xxxxxxxxxx> > Link: https://lore.kernel.org/r/20220610151228.4562-2-will@xxxxxxxxxx > Signed-off-by: Catalin Marinas <catalin.marinas@xxxxxxx> > --- > arch/arm64/mm/cache.S | 2 -- > 1 file changed, 2 deletions(-) All now queued up, thanks. greg k-h