mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
Merge tag 'dma-mapping-5.17-1' of git://git.infradead.org/users/hch/dma-mapping
Pull dma-mapping fix from Christoph Hellwig: - fix a swiotlb info leak (Halil Pasic) * tag 'dma-mapping-5.17-1' of git://git.infradead.org/users/hch/dma-mapping: swiotlb: fix info leak with DMA_FROM_DEVICE
This commit is contained in:
@@ -130,3 +130,11 @@ accesses to DMA buffers in both privileged "supervisor" and unprivileged
|
|||||||
subsystem that the buffer is fully accessible at the elevated privilege
|
subsystem that the buffer is fully accessible at the elevated privilege
|
||||||
level (and ideally inaccessible or at least read-only at the
|
level (and ideally inaccessible or at least read-only at the
|
||||||
lesser-privileged levels).
|
lesser-privileged levels).
|
||||||
|
|
||||||
|
DMA_ATTR_OVERWRITE
|
||||||
|
------------------
|
||||||
|
|
||||||
|
This is a hint to the DMA-mapping subsystem that the device is expected to
|
||||||
|
overwrite the entire mapped size, thus the caller does not require any of the
|
||||||
|
previous buffer contents to be preserved. This allows bounce-buffering
|
||||||
|
implementations to optimise DMA_FROM_DEVICE transfers.
|
||||||
|
@@ -61,6 +61,14 @@
|
|||||||
*/
|
*/
|
||||||
#define DMA_ATTR_PRIVILEGED (1UL << 9)
|
#define DMA_ATTR_PRIVILEGED (1UL << 9)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is a hint to the DMA-mapping subsystem that the device is expected
|
||||||
|
* to overwrite the entire mapped size, thus the caller does not require any
|
||||||
|
* of the previous buffer contents to be preserved. This allows
|
||||||
|
* bounce-buffering implementations to optimise DMA_FROM_DEVICE transfers.
|
||||||
|
*/
|
||||||
|
#define DMA_ATTR_OVERWRITE (1UL << 10)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A dma_addr_t can hold any valid DMA or bus address for the platform. It can
|
* A dma_addr_t can hold any valid DMA or bus address for the platform. It can
|
||||||
* be given to a device to use as a DMA source or target. It is specific to a
|
* be given to a device to use as a DMA source or target. It is specific to a
|
||||||
|
@@ -628,7 +628,8 @@ phys_addr_t swiotlb_tbl_map_single(struct device *dev, phys_addr_t orig_addr,
|
|||||||
mem->slots[index + i].orig_addr = slot_addr(orig_addr, i);
|
mem->slots[index + i].orig_addr = slot_addr(orig_addr, i);
|
||||||
tlb_addr = slot_addr(mem->start, index) + offset;
|
tlb_addr = slot_addr(mem->start, index) + offset;
|
||||||
if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC) &&
|
if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC) &&
|
||||||
(dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL))
|
(!(attrs & DMA_ATTR_OVERWRITE) || dir == DMA_TO_DEVICE ||
|
||||||
|
dir == DMA_BIDIRECTIONAL))
|
||||||
swiotlb_bounce(dev, tlb_addr, mapping_size, DMA_TO_DEVICE);
|
swiotlb_bounce(dev, tlb_addr, mapping_size, DMA_TO_DEVICE);
|
||||||
return tlb_addr;
|
return tlb_addr;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user