From d5b3c62e815958d36a21afd1d0d7454997f6a2de Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Mon, 25 Oct 2021 16:22:56 +0200 Subject: [PATCH] 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 Reviewed-by: Laine Stump --- src/node_device/node_device_udev.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index 7c3bb762b3..cd1722f934 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -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; }