vulkan/wsi: fix double free on error condition
authorIván Briano <ivan.briano@intel.com>
Thu, 1 Jun 2023 21:18:21 +0000 (14:18 -0700)
committerIván Briano <ivan.briano@intel.com>
Fri, 2 Jun 2023 22:12:19 +0000 (15:12 -0700)
On error during wsi_wl_surface_create_swapchain(),
wsi_wl_swapchain_chain_free() is called, followed by vk_free() of the
recently freed chain.
Move the vk_free() to wsi_wl_swapchain_destroy() to avoid the double
free.

Fixes dEQP-VK.wsi.wayland.swapchain.simulate_oom.*

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23383>

src/vulkan/wsi/wsi_common_wayland.c

index c6f70f4..9ccf26b 100644 (file)
@@ -2168,8 +2168,6 @@ wsi_wl_swapchain_chain_free(struct wsi_wl_swapchain *chain,
    }
 
    wsi_swapchain_finish(&chain->base);
-
-   vk_free(pAllocator, chain);
 }
 
 static VkResult
@@ -2181,6 +2179,8 @@ wsi_wl_swapchain_destroy(struct wsi_swapchain *wsi_chain,
    wsi_wl_swapchain_images_free(chain);
    wsi_wl_swapchain_chain_free(chain, pAllocator);
 
+   vk_free(pAllocator, chain);
+
    return VK_SUCCESS;
 }