node_device: Fix memory leak in udevProcessMediatedDevice

One of the paths returned -1 directly without going through the cleanup
section.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
This commit is contained in:
Jiri Denemark 2021-10-25 16:22:56 +02:00
parent b564ce40aa
commit d5b3c62e81

View File

@ -1020,10 +1020,9 @@ static int
udevProcessMediatedDevice(struct udev_device *dev,
virNodeDeviceDef *def)
{
int ret = -1;
int iommugrp = -1;
char *linkpath = NULL;
char *canonicalpath = NULL;
g_autofree char *linkpath = NULL;
g_autofree char *canonicalpath = NULL;
virNodeDevCapMdev *data = &def->caps->data.mdev;
struct udev_device *parent_device = NULL;
@ -1039,19 +1038,19 @@ udevProcessMediatedDevice(struct udev_device *dev,
virReportSystemError(errno,
_("failed to wait for file '%s' to appear"),
linkpath);
goto cleanup;
return -1;
}
if (virFileResolveLink(linkpath, &canonicalpath) < 0) {
virReportSystemError(errno, _("failed to resolve '%s'"), linkpath);
goto cleanup;
return -1;
}
data->type = g_path_get_basename(canonicalpath);
data->uuid = g_strdup(udev_device_get_sysname(dev));
if ((iommugrp = virMediatedDeviceGetIOMMUGroupNum(data->uuid)) < 0)
goto cleanup;
return -1;
/* lookup the address of parent device */
parent_device = udev_device_get_parent(dev);
@ -1072,11 +1071,7 @@ udevProcessMediatedDevice(struct udev_device *dev,
data->iommuGroupNumber = iommugrp;
ret = 0;
cleanup:
VIR_FREE(linkpath);
VIR_FREE(canonicalpath);
return ret;
return 0;
}