From 1a4c0ec9aea13211997f982715fe5ffcf19dd067 Mon Sep 17 00:00:00 2001 From: Eric Engestrom Date: Fri, 13 Aug 2021 21:19:13 +0100 Subject: [PATCH] xf86drm: fix mem leak in drm_usb_dev_path() `sysfs_uevent_get()` returns a `strndup()`ed string, which must be `free()`d. Fixes: bf63f8acdc94164ad29d ("libdrm: Handle usb_interface devices for usb parsing") Reviewed-by: Simon Ser Reviewed-by: Emil Velikov --- xf86drm.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/xf86drm.c b/xf86drm.c index 1f0b847a..8e9989d0 100644 --- a/xf86drm.c +++ b/xf86drm.c @@ -3998,6 +3998,7 @@ free_device: static int drm_usb_dev_path(int maj, int min, char *path, size_t len) { char *value, *tmp_path, *slash; + bool usb_device, usb_interface; snprintf(path, len, "/sys/dev/char/%d:%d/device", maj, min); @@ -4005,9 +4006,13 @@ static int drm_usb_dev_path(int maj, int min, char *path, size_t len) if (!value) return -ENOENT; - if (strcmp(value, "usb_device") == 0) + usb_device = strcmp(value, "usb_device") == 0; + usb_interface = strcmp(value, "usb_interface") == 0; + free(value); + + if (usb_device) return 0; - if (strcmp(value, "usb_interface") != 0) + if (!usb_interface) return -ENOTSUP; /* The parent of a usb_interface is a usb_device */