From 072de836f53be56a70cecf70b43ae43b7ce17376 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 11 Dec 2023 10:08:36 +0000
Subject: [PATCH] mk-rootfs.sh
---
kernel/drivers/uio/uio_pci_generic.c | 17 +++++++++++++++++
1 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/kernel/drivers/uio/uio_pci_generic.c b/kernel/drivers/uio/uio_pci_generic.c
index 8773e37..dde5cbb 100644
--- a/kernel/drivers/uio/uio_pci_generic.c
+++ b/kernel/drivers/uio/uio_pci_generic.c
@@ -39,6 +39,22 @@
return container_of(info, struct uio_pci_generic_dev, info);
}
+static int release(struct uio_info *info, struct inode *inode)
+{
+ struct uio_pci_generic_dev *gdev = to_uio_pci_generic_dev(info);
+
+ /*
+ * This driver is insecure when used with devices doing DMA, but some
+ * people (mis)use it with such devices.
+ * Let's at least make sure DMA isn't left enabled after the userspace
+ * driver closes the fd.
+ * Note that there's a non-zero chance doing this will wedge the device
+ * at least until reset.
+ */
+ pci_clear_master(gdev->pdev);
+ return 0;
+}
+
/* Interrupt handler. Read/modify/write the command register to disable
* the interrupt. */
static irqreturn_t irqhandler(int irq, struct uio_info *info)
@@ -78,6 +94,7 @@
gdev->info.name = "uio_pci_generic";
gdev->info.version = DRIVER_VERSION;
+ gdev->info.release = release;
gdev->pdev = pdev;
if (pdev->irq) {
gdev->info.irq = pdev->irq;
--
Gitblit v1.6.2