linux/Documentation/core-api
Halil Pasic 2c1f97af38 swiotlb: rework "fix info leak with DMA_FROM_DEVICE"
commit aa6f8dcbab upstream.

Unfortunately, we ended up merging an old version of the patch "fix info
leak with DMA_FROM_DEVICE" instead of merging the latest one. Christoph
(the swiotlb maintainer), he asked me to create an incremental fix
(after I have pointed this out the mix up, and asked him for guidance).
So here we go.

The main differences between what we got and what was agreed are:
* swiotlb_sync_single_for_device is also required to do an extra bounce
* We decided not to introduce DMA_ATTR_OVERWRITE until we have exploiters
* The implantation of DMA_ATTR_OVERWRITE is flawed: DMA_ATTR_OVERWRITE
  must take precedence over DMA_ATTR_SKIP_CPU_SYNC

Thus this patch removes DMA_ATTR_OVERWRITE, and makes
swiotlb_sync_single_for_device() bounce unconditionally (that is, also
when dir == DMA_TO_DEVICE) in order do avoid synchronising back stale
data from the swiotlb buffer.

Let me note, that if the size used with dma_sync_* API is less than the
size used with dma_[un]map_*, under certain circumstances we may still
end up with swiotlb not being transparent. In that sense, this is no
perfect fix either.

To get this bullet proof, we would have to bounce the entire
mapping/bounce buffer. For that we would have to figure out the starting
address, and the size of the mapping in
swiotlb_sync_single_for_device(). While this does seem possible, there
seems to be no firm consensus on how things are supposed to work.

Signed-off-by: Halil Pasic <pasic@linux.ibm.com>
Fixes: ddbd89deb7 ("swiotlb: fix info leak with DMA_FROM_DEVICE")
Cc: stable@vger.kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-03-16 14:23:43 +01:00
..
irq
assoc_array.rst
boot-time-mm.rst
bus-virt-phys-mapping.rst
cachetlb.rst
circular-buffers.rst
cpu_hotplug.rst
debug-objects.rst
debugging-via-ohci1394.rst
dma-api-howto.rst
dma-api.rst
dma-attributes.rst
dma-isa-lpc.rst
errseq.rst
genalloc.rst lib/genalloc.c: rename addr_in_gen_pool to gen_pool_has_addr 2019-12-04 19:44:13 -08:00
generic-radix-tree.rst
genericirq.rst
gfp_mask-from-fs-io.rst
idr.rst
index.rst
kernel-api.rst
kobject.rst
kref.rst
librs.rst
local_ops.rst timer: Remove init_timer() interface 2017-11-21 15:57:09 -08:00
memory-allocation.rst
memory-hotplug.rst
mm-api.rst
packing.rst
padata.rst
pin_user_pages.rst
printk-basics.rst
printk-formats.rst
protection-keys.rst
rbtree.rst
refcount-vs-atomic.rst
symbol-namespaces.rst
this_cpu_ops.rst
timekeeping.rst
tracepoint.rst
unaligned-memory-access.rst
workqueue.rst
xarray.rst