[libvirt] [PATCH 2/4] Only detect PCI Express devices as root in udev nodedev driver

Michal Privoznik mprivozn at redhat.com
Tue Jul 1 14:15:22 UTC 2014


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




More information about the libvir-list mailing list