On 05/02/2013 02:03 PM, Daniel P. Berrange wrote: > From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> > > The udevFreeIfaceDef function in the udev interface driver > just duplicates code from virInterfaceDefFree. Delete it > and call the standard API instead. > > Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> > --- > src/interface/interface_backend_udev.c | 45 ++-------------------------------- > 1 file changed, 2 insertions(+), 43 deletions(-) > > diff --git a/src/interface/interface_backend_udev.c b/src/interface/interface_backend_udev.c > index 79c57ee..0384ef5 100644 > --- a/src/interface/interface_backend_udev.c > +++ b/src/interface/interface_backend_udev.c > @@ -542,44 +542,6 @@ udevBridgeScanDirFilter(const struct dirent *entry) > return 1; > } > > -/** > - * Frees any memory allocated by udevGetIfaceDef() > - * > - * @param ifacedef - interface to free and cleanup > - */ > -static void > -udevFreeIfaceDef(virInterfaceDef *ifacedef) > -{ ... > - > - if (ifacedef->type == VIR_INTERFACE_TYPE_VLAN) { > - VIR_FREE(ifacedef->data.vlan.devname); > - } virInterfaceDefFree also frees data.vlan.tag, which would result in freeing an invalid pointer, because it's created by a pretty ugly way in udevGetIfaceDefVlan: vlan_parent_dev = strdup(name); if (!vlan_parent_dev) { virReportOOMError(); goto cleanup; } /* Find the DEVICE.VID again */ vid = strrchr(vlan_parent_dev, '.'); if (!vid) { virReportError(VIR_ERR_INTERNAL_ERROR, _("failed to find the VID for the VLAN device '%s'"), name); goto cleanup; } /* Replace the dot with a NULL so we can have the device and VID */ vid[0] = '\0'; vid++; /* Set the VLAN specifics */ ifacedef->data.vlan.tag = vid; ifacedef->data.vlan.devname = vlan_parent_dev; Jan -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list