Page MenuHomeFreeBSD

D31317.diff
No OneTemporary

D31317.diff

diff --git a/share/man/man4/pci.4 b/share/man/man4/pci.4
--- a/share/man/man4/pci.4
+++ b/share/man/man4/pci.4
@@ -24,12 +24,12 @@
.\"
.\" $FreeBSD$
.\"
-.Dd June 17, 2019
+.Dd July 27, 2021
.Dt PCI 4
.Os
.Sh NAME
.Nm pci
-.Nd generic PCI bus driver
+.Nd generic PCI/PCIe bus driver
.Sh SYNOPSIS
To compile the PCI bus driver into the kernel,
place the following line in your
@@ -53,6 +53,8 @@
.Nm
driver provides support for
.Tn PCI
+and
+.Tn PCIe
devices in the kernel and limited access to
.Tn PCI
devices for userland.
@@ -80,6 +82,15 @@
device.
If used improperly, this driver can allow userland applications to
crash a machine or cause data loss.
+In particular, driver only allows operations on the opened
+.Pa /dev/pci
+to modify system state if the file descriptor was opened for writing.
+For instance, the
+.Dv PCIOCREAD
+and
+.Dv PCIOCBARMMAP
+operations require a writeable descriptor, because reading a config register
+or a BAR read access could have function-specific side-effects.
.Pp
The
.Nm
diff --git a/sys/dev/pci/pci_user.c b/sys/dev/pci/pci_user.c
--- a/sys/dev/pci/pci_user.c
+++ b/sys/dev/pci/pci_user.c
@@ -947,7 +947,12 @@
io_old = NULL;
#endif
- if (!(flag & FWRITE)) {
+ /*
+ * Interpret read-only opened /dev/pci as a promise that no
+ * operation of the file descriptor could modify system state,
+ * including side-effects due to reading devices registers.
+ */
+ if ((flag & FWRITE) == 0) {
switch (cmd) {
case PCIOCGETCONF:
#ifdef COMPAT_FREEBSD32

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 17, 7:05 AM (21 h, 20 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14672216
Default Alt Text
D31317.diff (1 KB)

Event Timeline