[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 1/3] memory: Track whether a Device is engaged in IO
From: |
Alexander Bulekov |
Subject: |
[PATCH v2 1/3] memory: Track whether a Device is engaged in IO |
Date: |
Fri, 27 May 2022 12:19:35 -0400 |
Add a flag to the DeviceState, when a device is engaged in PIO/MMIO/DMA.
This flag should be set/checked prior to calling a device's MemoryRegion
handlers, and set when device code initiates DMA. The purpose of this
flag is to prevent DMA reentrancy issues. E.g.:
sdhci pio -> dma write -> sdhci mmio
nvme bh -> dma write -> nvme mmio
These issues have led to problems such as stack-exhaustion and
use-after-frees.
Assumptions:
* Devices do not interact with their own PIO/MMIO memory-regions using
DMA.
* There is now way for there to be multiple simultaneous accesses to a
device's PIO/MMIO memory-regions, or for multiple threads to perform
DMA accesses simultaneously on behalf of a single device.
Signed-off-by: Alexander Bulekov <alxndr@bu.edu>
---
include/hw/qdev-core.h | 3 +++
1 file changed, 3 insertions(+)
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 92c3d65208..6474dc51fa 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -193,6 +193,9 @@ struct DeviceState {
int instance_id_alias;
int alias_required_for_version;
ResettableState reset;
+
+ /* Is the device currently in mmio/pio/dma? Used to prevent re-entrancy */
+ int engaged_in_io;
};
struct DeviceListener {
--
2.33.0
Re: [PATCH v2 1/3] memory: Track whether a Device is engaged in IO, David Hildenbrand, 2022/05/30
[PATCH v2 2/3] memory: fix PIO/MMIO-initiated dma-reentracy issues, Alexander Bulekov, 2022/05/27