xf86drm: fix mem leak in drm_usb_dev_path()
`sysfs_uevent_get()` returns a `strndup()`ed string, which must be `free()`d.
Fixes: bf63f8acdc
("libdrm: Handle usb_interface devices for usb parsing")
Reviewed-by: Simon Ser <contact@emersion.fr>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
main
parent
1d29e1df8b
commit
1a4c0ec9ae
|
@ -3998,6 +3998,7 @@ free_device:
|
||||||
static int drm_usb_dev_path(int maj, int min, char *path, size_t len)
|
static int drm_usb_dev_path(int maj, int min, char *path, size_t len)
|
||||||
{
|
{
|
||||||
char *value, *tmp_path, *slash;
|
char *value, *tmp_path, *slash;
|
||||||
|
bool usb_device, usb_interface;
|
||||||
|
|
||||||
snprintf(path, len, "/sys/dev/char/%d:%d/device", maj, min);
|
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)
|
if (!value)
|
||||||
return -ENOENT;
|
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;
|
return 0;
|
||||||
if (strcmp(value, "usb_interface") != 0)
|
if (!usb_interface)
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
|
|
||||||
/* The parent of a usb_interface is a usb_device */
|
/* The parent of a usb_interface is a usb_device */
|
||||||
|
|
Loading…
Reference in New Issue