mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-22 04:25:18 +00:00
udevListInterfacesByStatus: Don't try to return NULL names
In case when the interface is being detached/reattached it may happen that udev will return NULL from 'udev_device_get_sysname()'. As the RPC code requires nonnull strings in the return array it fails to serialize such reply: libvirt: XML-RPC error : Unable to encode message payload Fix this by simply ignoring such interfaces as there's nothing we can report in such case. A similar fix was done to 'udevConnectListAllInterfaces' in commit 2ca94317ac6. Resolves: https://issues.redhat.com/browse/RHEL-34615 Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
bc596f2751
commit
df9ffb0256
@ -185,6 +185,7 @@ udevListInterfacesByStatus(virConnectPtr conn,
|
|||||||
udev_list_entry_foreach(dev_entry, devices) {
|
udev_list_entry_foreach(dev_entry, devices) {
|
||||||
struct udev_device *dev;
|
struct udev_device *dev;
|
||||||
const char *path;
|
const char *path;
|
||||||
|
const char *name;
|
||||||
g_autoptr(virInterfaceDef) def = NULL;
|
g_autoptr(virInterfaceDef) def = NULL;
|
||||||
|
|
||||||
/* Ensure we won't exceed the size of our array */
|
/* Ensure we won't exceed the size of our array */
|
||||||
@ -194,10 +195,17 @@ udevListInterfacesByStatus(virConnectPtr conn,
|
|||||||
path = udev_list_entry_get_name(dev_entry);
|
path = udev_list_entry_get_name(dev_entry);
|
||||||
dev = udev_device_new_from_syspath(udev, path);
|
dev = udev_device_new_from_syspath(udev, path);
|
||||||
|
|
||||||
|
if (!(name = udev_device_get_sysname(dev))) {
|
||||||
|
/* Name can be NULL in case when the interface is being unbound
|
||||||
|
* from the driver. The list API requires names to be present */
|
||||||
|
VIR_DEBUG("Skipping interface '%s', name == NULL", path);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
def = udevGetMinimalDefForDevice(dev);
|
def = udevGetMinimalDefForDevice(dev);
|
||||||
if (filter(conn, def)) {
|
if (filter(conn, def)) {
|
||||||
if (names)
|
if (names)
|
||||||
names[count] = g_strdup(udev_device_get_sysname(dev));
|
names[count] = g_strdup(name);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
udev_device_unref(dev);
|
udev_device_unref(dev);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user