From 0c85cb051fe766276f7a438972d93009be782a9c Mon Sep 17 00:00:00 2001 From: Patrick Lerda Date: Fri, 7 Apr 2023 18:03:58 +0200 Subject: [PATCH] egl: fix memory leak related to _eglRefreshDeviceList() Indeed, the unnecessary drmDevice objects were not freed. For instance, this issue could be triggered with: "piglit/bin/egl_ext_platform_device -auto -fbo": SUMMARY: AddressSanitizer: 2796 byte(s) leaked in 12 allocation(s). Fixes: e39d72aec203 ("egl: only take render nodes into account when listing DRM devices") Signed-off-by: Patrick Lerda Reviewed-by: Eric Engestrom Part-of: (cherry picked from commit f9401a515a4cf75dfea99fe0fc579db0ae80d10e) --- .pick_status.json | 2 +- src/egl/main/egldevice.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 4cee6100af8..fbfc20e3b54 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4574,7 +4574,7 @@ "description": "egl: fix memory leak related to _eglRefreshDeviceList()", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "e39d72aec203ee317feb87ba1c8953a99aad2a5c", "notes": null diff --git a/src/egl/main/egldevice.c b/src/egl/main/egldevice.c index c1c421b5050..0426668ca21 100644 --- a/src/egl/main/egldevice.c +++ b/src/egl/main/egldevice.c @@ -300,8 +300,10 @@ _eglRefreshDeviceList(void) num_devs = drmGetDevices2(0, devices, ARRAY_SIZE(devices)); for (int i = 0; i < num_devs; i++) { - if (!(devices[i]->available_nodes & (1 << DRM_NODE_RENDER))) + if (!(devices[i]->available_nodes & (1 << DRM_NODE_RENDER))) { + drmFreeDevice(&devices[i]); continue; + } ret = _eglAddDRMDevice(devices[i], NULL);