/dev/pci: clarify meaning of writeable file descriptor

(cherry picked from commit 85ae35ef37)
This commit is contained in:
Konstantin Belousov 2021-07-27 03:22:14 +03:00
parent fb29b54a91
commit dfda6a71e7
2 changed files with 19 additions and 3 deletions

View file

@ -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 @@ The
.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 @@ granting access to the
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

View file

@ -943,7 +943,12 @@ pci_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *t
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