From 3c6a46d95dd58c25c0e1c16bafb04c0d06bf7b89 Mon Sep 17 00:00:00 2001 From: LazyBumHorse Date: Thu, 15 Aug 2019 16:57:34 +0200 Subject: [PATCH] fix handling of vulkan_gpu_list (use after free, not always being initialized) --- gfx/common/vulkan_common.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/gfx/common/vulkan_common.c b/gfx/common/vulkan_common.c index b63a69615d..6e1073dda3 100644 --- a/gfx/common/vulkan_common.c +++ b/gfx/common/vulkan_common.c @@ -1603,9 +1603,6 @@ static bool vulkan_context_init_gpu(gfx_ctx_vulkan_data_t *vk) union string_list_elem_attr attr = {0}; settings_t *settings = config_get_ptr(); - if (vk->context.gpu != VK_NULL_HANDLE) - return true; - if (vkEnumeratePhysicalDevices(vk->context.instance, &gpu_count, NULL) != VK_SUCCESS) { @@ -1654,6 +1651,12 @@ static bool vulkan_context_init_gpu(gfx_ctx_vulkan_data_t *vk) video_driver_set_gpu_api_devices(GFX_CTX_VULKAN_API, vulkan_gpu_list); + if (vk->context.gpu != VK_NULL_HANDLE) + { + free(gpus); + return true; + } + if (0 <= settings->ints.vulkan_gpu_index && settings->ints.vulkan_gpu_index < (int)gpu_count) { RARCH_LOG("[Vulkan]: Using GPU index %d.\n", settings->ints.vulkan_gpu_index); @@ -2690,6 +2693,7 @@ void vulkan_context_destroy(gfx_ctx_vulkan_data_t *vk, } } + video_driver_set_gpu_api_devices(GFX_CTX_VULKAN_API, NULL); if (vulkan_gpu_list) { string_list_free(vulkan_gpu_list);