OpenCloudOS-Kernel/drivers/xen/xen-pciback
Marek Marczykowski-Górecki 476878e4b2 xen-pciback: optionally allow interrupt enable flag writes
QEMU running in a stubdom needs to be able to set INTX_DISABLE, and the
MSI(-X) enable flags in the PCI config space. This adds an attribute
'allow_interrupt_control' which when set for a PCI device allows writes
to this flag(s). The toolstack will need to set this for stubdoms.
When enabled, guest (stubdomain) will be allowed to set relevant enable
flags, but only one at a time - i.e. it refuses to enable more than one
of INTx, MSI, MSI-X at a time.

This functionality is needed only for config space access done by device
model (stubdomain) serving a HVM with the actual PCI device. It is not
necessary and unsafe to enable direct access to those bits for PV domain
with the device attached. For PV domains, there are separate protocol
messages (XEN_PCI_OP_{enable,disable}_{msi,msix}) for this purpose.
Those ops in addition to setting enable bits, also configure MSI(-X) in
dom0 kernel - which is undesirable for PCI passthrough to HVM guests.

This should not introduce any new security issues since a malicious
guest (or stubdom) can already generate MSIs through other ways, see
[1] page 8. Additionally, when qemu runs in dom0, it already have direct
access to those bits.

This is the second iteration of this feature. First was proposed as a
direct Xen interface through a new hypercall, but ultimately it was
rejected by the maintainer, because of mixing pciback and hypercalls for
PCI config space access isn't a good design. Full discussion at [2].

[1]: https://invisiblethingslab.com/resources/2011/Software%20Attacks%20on%20Intel%20VT-d.pdf
[2]: https://xen.markmail.org/thread/smpgpws4umdzizze

[part of the commit message and sysfs handling]
Signed-off-by: Simon Gaiser <simon@invisiblethingslab.com>
[the rest]
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
[boris: A few small changes suggested by Roger, some formatting changes]
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
2020-01-15 16:50:13 -06:00
..
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
conf_space.c xen-pciback: optionally allow interrupt enable flag writes 2020-01-15 16:50:13 -06:00
conf_space.h xen-pciback: optionally allow interrupt enable flag writes 2020-01-15 16:50:13 -06:00
conf_space_capability.c xen-pciback: optionally allow interrupt enable flag writes 2020-01-15 16:50:13 -06:00
conf_space_header.c xen-pciback: optionally allow interrupt enable flag writes 2020-01-15 16:50:13 -06:00
conf_space_quirks.c xen: xen-pciback: Replace GFP_ATOMIC with GFP_KERNEL in xen_pcibk_config_quirks_init 2018-04-16 10:20:31 -04:00
conf_space_quirks.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
passthrough.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pci_stub.c xen-pciback: optionally allow interrupt enable flag writes 2020-01-15 16:50:13 -06:00
pciback.h xen-pciback: optionally allow interrupt enable flag writes 2020-01-15 16:50:13 -06:00
pciback_ops.c xen/pciback: Don't disable PCI_COMMAND on PCI device reset. 2019-02-18 06:49:46 +01:00
vpci.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
xenbus.c xen: xen-pciback: fix warning Using plain integer as NULL pointer 2019-04-23 11:15:09 -04:00