From 3b6b88c184ddbe41ddab91a543e08fddcef14481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Thu, 11 Apr 2024 11:42:51 +0200 Subject: [PATCH] dri3: Free formats in cache_formats_and_modifiers Fixes leak: ==15672== 60 bytes in 1 blocks are definitely lost in loss record 3,803 of 8,127 ==15672== at 0x4840718: malloc (vg_replace_malloc.c:392) ==15672== by 0x2F2698: XNFreallocarray (alloc.c:55) ==15672== by 0x1ADAA9: xwl_dmabuf_get_formats_for_device (xwayland-dmabuf.c:207) ==15672== by 0x1ADAA9: xwl_glamor_get_formats (xwayland-dmabuf.c:248) ==15672== by 0x303D86: cache_formats_and_modifiers (dri3_screen.c:176) ==15672== by 0x303D86: dri3_get_supported_modifiers (dri3_screen.c:229) ==15672== by 0x30331A: proc_dri3_get_supported_modifiers (dri3_request.c:389) ==15672== by 0x217B6B: Dispatch (dispatch.c:550) ==15672== by 0x21B9A0: dix_main (main.c:276) ==15672== by 0x51086C9: (below main) (libc_start_call_main.h:58) Fixes: a42992a4cca4 ("dri3: rework format/modifier caching") Part-of: --- dri3/dri3_screen.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dri3/dri3_screen.c b/dri3/dri3_screen.c index 5614a22b3..2430505fb 100644 --- a/dri3/dri3_screen.c +++ b/dri3/dri3_screen.c @@ -183,8 +183,10 @@ cache_formats_and_modifiers(ScreenPtr screen) } ds->formats = calloc(num_formats, sizeof(dri3_dmabuf_format_rec)); - if (!ds->formats) + if (!ds->formats) { + free(formats); return BadAlloc; + } for (i = 0; i < num_formats; i++) { dri3_dmabuf_format_ptr iter = &ds->formats[i]; @@ -205,6 +207,7 @@ cache_formats_and_modifiers(ScreenPtr screen) ds->num_formats = i; ds->formats_cached = TRUE; + free(formats); return Success; }