mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 17:34:18 +03: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
2ca94317ac
.
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…
Reference in New Issue
Block a user