From c644493085ae69e659baebf687960b7bf6c3723c Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Wed, 25 Jun 2025 10:14:42 +0800 Subject: [PATCH] libavutil: fix memory leak of drmVersion address sanitizer showed some leaks of drmVersion structs. `vaapi_device_create` did not call drmFreeVersion in all possible code paths. Signed-off-by: Tim Blechmann --- libavutil/hwcontext_vaapi.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c index 95aa38d9d2..92b704891e 100644 --- a/libavutil/hwcontext_vaapi.c +++ b/libavutil/hwcontext_vaapi.c @@ -1810,30 +1810,33 @@ static int vaapi_device_create(AVHWDeviceContext *ctx, const char *device, char drm_vendor[8]; if (drmGetDevice(priv->drm_fd, &device)) { av_log(ctx, AV_LOG_VERBOSE, "Failed to get DRM device info for device %d.\n", n); close(priv->drm_fd); priv->drm_fd = -1; + drmFreeVersion(info); continue; } snprintf(drm_vendor, sizeof(drm_vendor), "0x%x", device->deviceinfo.pci->vendor_id); if (strcmp(vendor_id->value, drm_vendor)) { av_log(ctx, AV_LOG_VERBOSE, "Ignoring device %d " "with non-matching vendor id (%s).\n", n, vendor_id->value); drmFreeDevice(&device); close(priv->drm_fd); priv->drm_fd = -1; + drmFreeVersion(info); continue; } av_log(ctx, AV_LOG_VERBOSE, "Trying to use " "DRM render node for device %d, " "with matching vendor id (%s).\n", n, vendor_id->value); drmFreeDevice(&device); + drmFreeVersion(info); break; } drmFreeVersion(info); #endif av_log(ctx, AV_LOG_VERBOSE, "Trying to use " "DRM render node for device %d.\n", n); -- 2.48.1