All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v7 00/15] Restricted DMA
@ 2021-05-18  6:42 ` Claire Chang
  0 siblings, 0 replies; 265+ messages in thread
From: Claire Chang @ 2021-05-18  6:42 UTC (permalink / raw)
  To: Rob Herring, mpe, Joerg Roedel, Will Deacon, Frank Rowand,
	Konrad Rzeszutek Wilk, boris.ostrovsky, jgross,
	Christoph Hellwig, Marek Szyprowski
  Cc: benh, paulus, list@263.net:IOMMU DRIVERS, sstabellini,
	Robin Murphy, grant.likely, xypron.glpk, Thierry Reding, mingo,
	bauerman, peterz, Greg KH, Saravana Kannan, Rafael J . Wysocki,
	heikki.krogerus, Andy Shevchenko, Randy Dunlap, Dan Williams,
	Bartosz Golaszewski, linux-devicetree, lkml, linuxppc-dev,
	xen-devel, Nicolas Boichat, Jim Quinlan, tfiga, bskeggs,
	bhelgaas, chris, tientzu, daniel, airlied, dri-devel, intel-gfx,
	jani.nikula, jxgao, joonas.lahtinen, linux-pci,
	maarten.lankhorst, matthew.auld, rodrigo.vivi, thomas.hellstrom

This series implements mitigations for lack of DMA access control on
systems without an IOMMU, which could result in the DMA accessing the
system memory at unexpected times and/or unexpected addresses, possibly
leading to data leakage or corruption.

For example, we plan to use the PCI-e bus for Wi-Fi and that PCI-e bus is
not behind an IOMMU. As PCI-e, by design, gives the device full access to
system memory, a vulnerability in the Wi-Fi firmware could easily escalate
to a full system exploit (remote wifi exploits: [1a], [1b] that shows a
full chain of exploits; [2], [3]).

To mitigate the security concerns, we introduce restricted DMA. Restricted
DMA utilizes the existing swiotlb to bounce streaming DMA in and out of a
specially allocated region and does memory allocation from the same region.
The feature on its own provides a basic level of protection against the DMA
overwriting buffer contents at unexpected times. However, to protect
against general data leakage and system memory corruption, the system needs
to provide a way to restrict the DMA to a predefined memory region (this is
usually done at firmware level, e.g. MPU in ATF on some ARM platforms [4]).

[1a] https://googleprojectzero.blogspot.com/2017/04/over-air-exploiting-broadcoms-wi-fi_4.html
[1b] https://googleprojectzero.blogspot.com/2017/04/over-air-exploiting-broadcoms-wi-fi_11.html
[2] https://blade.tencent.com/en/advisories/qualpwn/
[3] https://www.bleepingcomputer.com/news/security/vulnerabilities-found-in-highly-popular-firmware-for-wifi-chips/
[4] https://github.com/ARM-software/arm-trusted-firmware/blob/master/plat/mediatek/mt8183/drivers/emi_mpu/emi_mpu.c#L132

v7:
Fix debugfs, PageHighMem and comment style in rmem_swiotlb_device_init

v6:
Address the comments in v5
https://lore.kernel.org/patchwork/cover/1423201/

v5:
Rebase on latest linux-next
https://lore.kernel.org/patchwork/cover/1416899/

v4:
- Fix spinlock bad magic
- Use rmem->name for debugfs entry
- Address the comments in v3
https://lore.kernel.org/patchwork/cover/1378113/

v3:
Using only one reserved memory region for both streaming DMA and memory
allocation.
https://lore.kernel.org/patchwork/cover/1360992/

v2:
Building on top of swiotlb.
https://lore.kernel.org/patchwork/cover/1280705/

v1:
Using dma_map_ops.
https://lore.kernel.org/patchwork/cover/1271660/

Claire Chang (15):
  swiotlb: Refactor swiotlb init functions
  swiotlb: Refactor swiotlb_create_debugfs
  swiotlb: Add DMA_RESTRICTED_POOL
  swiotlb: Add restricted DMA pool initialization
  swiotlb: Add a new get_io_tlb_mem getter
  swiotlb: Update is_swiotlb_buffer to add a struct device argument
  swiotlb: Update is_swiotlb_active to add a struct device argument
  swiotlb: Bounce data from/to restricted DMA pool if available
  swiotlb: Move alloc_size to find_slots
  swiotlb: Refactor swiotlb_tbl_unmap_single
  dma-direct: Add a new wrapper __dma_direct_free_pages()
  swiotlb: Add restricted DMA alloc/free support.
  dma-direct: Allocate memory from restricted DMA pool if available
  dt-bindings: of: Add restricted DMA pool
  of: Add plumbing for restricted DMA pool

 .../reserved-memory/reserved-memory.txt       |  27 ++
 drivers/gpu/drm/i915/gem/i915_gem_internal.c  |   2 +-
 drivers/gpu/drm/nouveau/nouveau_ttm.c         |   2 +-
 drivers/iommu/dma-iommu.c                     |  12 +-
 drivers/of/address.c                          |  25 ++
 drivers/of/device.c                           |   3 +
 drivers/of/of_private.h                       |   5 +
 drivers/pci/xen-pcifront.c                    |   2 +-
 drivers/xen/swiotlb-xen.c                     |   2 +-
 include/linux/device.h                        |   4 +
 include/linux/swiotlb.h                       |  41 ++-
 kernel/dma/Kconfig                            |  14 +
 kernel/dma/direct.c                           |  63 +++--
 kernel/dma/direct.h                           |   9 +-
 kernel/dma/swiotlb.c                          | 242 +++++++++++++-----
 15 files changed, 356 insertions(+), 97 deletions(-)

-- 
2.31.1.751.gd2f1c929bd-goog


^ permalink raw reply	[flat|nested] 265+ messages in thread

end of thread, other threads:[~2021-06-01 19:42 UTC | newest]

Thread overview: 265+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-18  6:42 [PATCH v7 00/15] Restricted DMA Claire Chang
2021-05-18  6:42 ` [Intel-gfx] " Claire Chang
2021-05-18  6:42 ` Claire Chang
2021-05-18  6:42 ` Claire Chang
2021-05-18  6:42 ` Claire Chang
2021-05-18  6:42 ` [PATCH v7 01/15] swiotlb: Refactor swiotlb init functions Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-19 18:50   ` Florian Fainelli
2021-05-19 18:50     ` [Intel-gfx] " Florian Fainelli
2021-05-19 18:50     ` Florian Fainelli
2021-05-19 18:50     ` Florian Fainelli
2021-05-19 18:50     ` Florian Fainelli
2021-05-20  6:40     ` Claire Chang
2021-05-20  6:40       ` Claire Chang
2021-05-20  6:40       ` [Intel-gfx] " Claire Chang
2021-05-20  6:40       ` Claire Chang
2021-05-20  6:40       ` Claire Chang
2021-05-20  6:40       ` Claire Chang
2021-05-24 15:53       ` Konrad Rzeszutek Wilk
2021-05-24 15:53         ` [Intel-gfx] " Konrad Rzeszutek Wilk
2021-05-24 15:53         ` Konrad Rzeszutek Wilk
2021-05-24 15:53         ` Konrad Rzeszutek Wilk
2021-05-24 15:53         ` Konrad Rzeszutek Wilk
2021-05-25  3:08         ` Claire Chang
2021-05-25  3:08           ` Claire Chang
2021-05-25  3:08           ` [Intel-gfx] " Claire Chang
2021-05-25  3:08           ` Claire Chang
2021-05-25  3:08           ` Claire Chang
2021-05-25  3:08           ` Claire Chang
2021-05-27 13:02     ` Christoph Hellwig
2021-05-27 13:02       ` [Intel-gfx] " Christoph Hellwig
2021-05-27 13:02       ` Christoph Hellwig
2021-05-27 13:02       ` Christoph Hellwig
2021-05-27 14:41       ` Tom Lendacky
2021-05-27 14:41         ` [Intel-gfx] " Tom Lendacky
2021-05-27 14:41         ` Tom Lendacky
2021-05-27 14:41         ` Tom Lendacky
2021-05-27 14:41         ` Tom Lendacky
2021-05-27 16:32         ` Tom Lendacky
2021-05-27 16:32           ` [Intel-gfx] " Tom Lendacky
2021-05-27 16:32           ` Tom Lendacky
2021-05-27 16:32           ` Tom Lendacky
2021-05-27 16:32           ` Tom Lendacky
2021-05-31 15:00           ` Claire Chang
2021-05-31 15:00             ` Claire Chang
2021-05-31 15:00             ` [Intel-gfx] " Claire Chang
2021-05-31 15:00             ` Claire Chang
2021-05-31 15:00             ` Claire Chang
2021-05-31 15:00             ` Claire Chang
2021-05-18  6:42 ` [PATCH v7 02/15] swiotlb: Refactor swiotlb_create_debugfs Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-19 19:24   ` Florian Fainelli
2021-05-19 19:24     ` [Intel-gfx] " Florian Fainelli
2021-05-19 19:24     ` Florian Fainelli
2021-05-19 19:24     ` Florian Fainelli
2021-05-19 19:24     ` Florian Fainelli
2021-05-27 13:24   ` Christoph Hellwig
2021-05-27 13:24     ` [Intel-gfx] " Christoph Hellwig
2021-05-27 13:24     ` Christoph Hellwig
2021-05-27 13:24     ` Christoph Hellwig
2021-05-18  6:42 ` [PATCH v7 03/15] swiotlb: Add DMA_RESTRICTED_POOL Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-19 19:00   ` Florian Fainelli
2021-05-19 19:00     ` [Intel-gfx] " Florian Fainelli
2021-05-19 19:00     ` Florian Fainelli
2021-05-19 19:00     ` Florian Fainelli
2021-05-19 19:00     ` Florian Fainelli
2021-05-27 13:25   ` Christoph Hellwig
2021-05-27 13:25     ` [Intel-gfx] " Christoph Hellwig
2021-05-27 13:25     ` Christoph Hellwig
2021-05-27 13:25     ` Christoph Hellwig
2021-05-18  6:42 ` [PATCH v7 04/15] swiotlb: Add restricted DMA pool initialization Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:48   ` Claire Chang
2021-05-18  6:48     ` Claire Chang
2021-05-18  6:48     ` [Intel-gfx] " Claire Chang
2021-05-18  6:48     ` Claire Chang
2021-05-18  6:48     ` Claire Chang
2021-05-18  6:48     ` Claire Chang
2021-05-24 15:49     ` Konrad Rzeszutek Wilk
2021-05-24 15:49       ` [Intel-gfx] " Konrad Rzeszutek Wilk
2021-05-24 15:49       ` Konrad Rzeszutek Wilk
2021-05-24 15:49       ` Konrad Rzeszutek Wilk
2021-05-24 15:49       ` Konrad Rzeszutek Wilk
2021-05-25  3:08       ` Claire Chang
2021-05-25  3:08         ` Claire Chang
2021-05-25  3:08         ` [Intel-gfx] " Claire Chang
2021-05-25  3:08         ` Claire Chang
2021-05-25  3:08         ` Claire Chang
2021-05-25  3:08         ` Claire Chang
2021-05-27 13:27       ` Christoph Hellwig
2021-05-27 13:27         ` [Intel-gfx] " Christoph Hellwig
2021-05-27 13:27         ` Christoph Hellwig
2021-05-27 13:27         ` Christoph Hellwig
2021-05-19 18:54   ` Florian Fainelli
2021-05-19 18:54     ` [Intel-gfx] " Florian Fainelli
2021-05-19 18:54     ` Florian Fainelli
2021-05-19 18:54     ` Florian Fainelli
2021-05-19 18:54     ` Florian Fainelli
2021-05-20  6:39     ` Claire Chang
2021-05-20  6:39       ` Claire Chang
2021-05-20  6:39       ` [Intel-gfx] " Claire Chang
2021-05-20  6:39       ` Claire Chang
2021-05-20  6:39       ` Claire Chang
2021-05-20  6:39       ` Claire Chang
2021-05-27 13:27   ` Christoph Hellwig
2021-05-27 13:27     ` [Intel-gfx] " Christoph Hellwig
2021-05-27 13:27     ` Christoph Hellwig
2021-05-27 13:27     ` Christoph Hellwig
2021-05-18  6:42 ` [PATCH v7 05/15] swiotlb: Add a new get_io_tlb_mem getter Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:51   ` Claire Chang
2021-05-18  6:51     ` Claire Chang
2021-05-18  6:51     ` [Intel-gfx] " Claire Chang
2021-05-18  6:51     ` Claire Chang
2021-05-18  6:51     ` Claire Chang
2021-05-18  6:51     ` Claire Chang
2021-05-24 15:51     ` Konrad Rzeszutek Wilk
2021-05-24 15:51       ` [Intel-gfx] " Konrad Rzeszutek Wilk
2021-05-24 15:51       ` Konrad Rzeszutek Wilk
2021-05-24 15:51       ` Konrad Rzeszutek Wilk
2021-05-24 15:51       ` Konrad Rzeszutek Wilk
2021-05-25  3:08       ` Claire Chang
2021-05-25  3:08         ` Claire Chang
2021-05-25  3:08         ` [Intel-gfx] " Claire Chang
2021-05-25  3:08         ` Claire Chang
2021-05-25  3:08         ` Claire Chang
2021-05-25  3:08         ` Claire Chang
2021-05-19 19:18   ` Florian Fainelli
2021-05-19 19:18     ` [Intel-gfx] " Florian Fainelli
2021-05-19 19:18     ` Florian Fainelli
2021-05-19 19:18     ` Florian Fainelli
2021-05-19 19:18     ` Florian Fainelli
2021-05-18  6:42 ` [PATCH v7 06/15] swiotlb: Update is_swiotlb_buffer to add a struct device argument Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-19 19:19   ` Florian Fainelli
2021-05-19 19:19     ` [Intel-gfx] " Florian Fainelli
2021-05-19 19:19     ` Florian Fainelli
2021-05-19 19:19     ` Florian Fainelli
2021-05-19 19:19     ` Florian Fainelli
2021-05-18  6:42 ` [PATCH v7 07/15] swiotlb: Update is_swiotlb_active " Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-19 19:20   ` Florian Fainelli
2021-05-19 19:20     ` [Intel-gfx] " Florian Fainelli
2021-05-19 19:20     ` Florian Fainelli
2021-05-19 19:20     ` Florian Fainelli
2021-05-19 19:20     ` Florian Fainelli
2021-05-27 13:28   ` Christoph Hellwig
2021-05-27 13:28     ` [Intel-gfx] " Christoph Hellwig
2021-05-27 13:28     ` Christoph Hellwig
2021-05-27 13:28     ` Christoph Hellwig
2021-05-18  6:42 ` [PATCH v7 08/15] swiotlb: Bounce data from/to restricted DMA pool if available Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42 ` [PATCH v7 09/15] swiotlb: Move alloc_size to find_slots Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42 ` [PATCH v7 10/15] swiotlb: Refactor swiotlb_tbl_unmap_single Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42 ` [PATCH v7 11/15] dma-direct: Add a new wrapper __dma_direct_free_pages() Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-19 18:59   ` Florian Fainelli
2021-05-19 18:59     ` [Intel-gfx] " Florian Fainelli
2021-05-19 18:59     ` Florian Fainelli
2021-05-19 18:59     ` Florian Fainelli
2021-05-19 18:59     ` Florian Fainelli
2021-05-18  6:42 ` [PATCH v7 12/15] swiotlb: Add restricted DMA alloc/free support Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42 ` [PATCH v7 13/15] dma-direct: Allocate memory from restricted DMA pool if available Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-27 13:30   ` Christoph Hellwig
2021-05-27 13:30     ` [Intel-gfx] " Christoph Hellwig
2021-05-27 13:30     ` Christoph Hellwig
2021-05-27 13:30     ` Christoph Hellwig
2021-05-18  6:42 ` [PATCH v7 14/15] dt-bindings: of: Add restricted DMA pool Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-26 12:13   ` Will Deacon
2021-05-26 12:13     ` [Intel-gfx] " Will Deacon
2021-05-26 12:13     ` Will Deacon
2021-05-26 12:13     ` Will Deacon
2021-05-26 12:13     ` Will Deacon
2021-05-26 15:53     ` Will Deacon
2021-05-26 15:53       ` [Intel-gfx] " Will Deacon
2021-05-26 15:53       ` Will Deacon
2021-05-26 15:53       ` Will Deacon
2021-05-26 15:53       ` Will Deacon
2021-05-27 11:29       ` Claire Chang
2021-05-27 11:29         ` Claire Chang
2021-05-27 11:29         ` [Intel-gfx] " Claire Chang
2021-05-27 11:29         ` Claire Chang
2021-05-27 11:29         ` Claire Chang
2021-05-27 11:29         ` Claire Chang
2021-05-27 11:34         ` Will Deacon
2021-05-27 11:34           ` [Intel-gfx] " Will Deacon
2021-05-27 11:34           ` Will Deacon
2021-05-27 11:34           ` Will Deacon
2021-05-27 11:34           ` Will Deacon
2021-05-27 12:48           ` Claire Chang
2021-05-27 12:48             ` Claire Chang
2021-05-27 12:48             ` [Intel-gfx] " Claire Chang
2021-05-27 12:48             ` Claire Chang
2021-05-27 12:48             ` Claire Chang
2021-05-27 12:48             ` Claire Chang
2021-05-27 12:53             ` Will Deacon
2021-05-27 12:53               ` [Intel-gfx] " Will Deacon
2021-05-27 12:53               ` Will Deacon
2021-05-27 12:53               ` Will Deacon
2021-05-27 12:53               ` Will Deacon
2021-05-18  6:42 ` [PATCH v7 15/15] of: Add plumbing for " Claire Chang
2021-05-18  6:42   ` [Intel-gfx] " Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:42   ` Claire Chang
2021-05-18  6:53 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Restricted DMA (rev3) Patchwork
2021-05-18  6:56 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2021-05-18  7:29 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2021-05-18  9:10 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2021-05-27 13:00 ` [PATCH v7 00/15] Restricted DMA Claire Chang
2021-05-27 13:00   ` Claire Chang
2021-05-27 13:00   ` [Intel-gfx] " Claire Chang
2021-05-27 13:00   ` Claire Chang
2021-05-27 13:00   ` Claire Chang
2021-05-27 13:00   ` Claire Chang
2021-05-27 13:54 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Restricted DMA (rev4) Patchwork
2021-06-01 19:42 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Restricted DMA (rev5) Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.