https://bugzilla.redhat.com/show_bug.cgi?id=684655 points out a regression introduced in commit 2215050edd - non-root users can't connect to qemu:///session because libvirtd dies when it can't use pciaccess initialization. * src/node_device/node_device_udev.c (udevDeviceMonitorStartup): Don't abort udev driver (and libvirtd overall) if non-root user can't use pciaccess. --- src/node_device/node_device_udev.c | 19 ++++++++++++------- 1 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index be6a371..44df16e 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -1,7 +1,7 @@ /* * node_device_udev.c: node device enumeration - libudev implementation * - * Copyright (C) 2009-2010 Red Hat, Inc. + * Copyright (C) 2009-2011 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -1589,7 +1589,7 @@ out: return ret; } -static int udevDeviceMonitorStartup(int privileged ATTRIBUTE_UNUSED) +static int udevDeviceMonitorStartup(int privileged) { udevPrivate *priv = NULL; struct udev *udev = NULL; @@ -1597,11 +1597,16 @@ static int udevDeviceMonitorStartup(int privileged ATTRIBUTE_UNUSED) int pciret; if ((pciret = pci_system_init()) != 0) { - char ebuf[256]; - VIR_ERROR(_("Failed to initialize libpciaccess: %s"), - virStrerror(pciret, ebuf, sizeof ebuf)); - ret = -1; - goto out; + /* Ignore failure as non-root; udev is not as helpful in that + * situation, but a non-privileged user won't benefit much + * from udev in the first place. */ + if (privileged || errno != EACCES) { + char ebuf[256]; + VIR_ERROR(_("Failed to initialize libpciaccess: %s"), + virStrerror(pciret, ebuf, sizeof ebuf)); + ret = -1; + goto out; + } } if (VIR_ALLOC(priv) < 0) { -- 1.7.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list