On 30.06.2014 15:38, Ján Tomko wrote:
This stops the error message spam when running unprivileged
libvirtd:
2014-06-30 12:38:47.990+0000: 631: error : virPCIDeviceConfigOpen:300 :
Failed to open config space file
'/sys/bus/pci/devices/0000:00:00.0/config': Permission denied
Reported by Daniel Berrange:
https://www.redhat.com/archives/libvir-list/2014-June/msg01082.html
---
src/node_device/node_device_udev.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
index 50bb952..fe3dd26 100644
--- a/src/node_device/node_device_udev.c
+++ b/src/node_device/node_device_udev.c
@@ -429,10 +429,13 @@ static int udevProcessPCI(struct udev_device *device,
virPCIDeviceAddress addr;
virPCIEDeviceInfoPtr pci_express = NULL;
virPCIDevicePtr pciDev = NULL;
+ udevPrivate *priv = NULL;
int tmpGroup, ret = -1;
char *p;
int rc;
+ priv = driverState->privateData;
+
I personally prefer the initialization to be done in the declaration.
But I can live with this too.
syspath = udev_device_get_syspath(device);
if (udevGetUintProperty(device,
@@ -544,7 +547,8 @@ static int udevProcessPCI(struct udev_device *device,
data->pci_dev.function)))
goto out;
- if (virPCIDeviceIsPCIExpress(pciDev) > 0) {
+ /* We need to be root to read PCI device configs */
+ if (priv->privileged && virPCIDeviceIsPCIExpress(pciDev) > 0) {
if (VIR_ALLOC(pci_express) < 0)
goto out;
Michal