egl: fix memory leak related to _eglRefreshDeviceList()
authorPatrick Lerda <patrick9876@free.fr>
Fri, 7 Apr 2023 16:03:58 +0000 (18:03 +0200)
committerMarge Bot <emma+marge@anholt.net>
Tue, 11 Apr 2023 15:48:26 +0000 (15:48 +0000)
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 <patrick9876@free.fr>
Reviewed-by: Eric Engestrom <eric@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22408>

src/egl/main/egldevice.c

index 39a1237..ba77430 100644 (file)
@@ -284,8 +284,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);