From 6b7dad7d82801e5aa1ec6c733913c6e3c86971d7 Mon Sep 17 00:00:00 2001 From: Katelyn Gadd Date: Mon, 20 Jan 2025 22:25:16 -0500 Subject: [PATCH] vulkan: move temporary pointer to its own field to prevent a bad dereference. Reference Issue #11075. --- src/gpu/vulkan/SDL_gpu_vulkan.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gpu/vulkan/SDL_gpu_vulkan.c b/src/gpu/vulkan/SDL_gpu_vulkan.c index 6bf12b0f23..bf300a1a8d 100644 --- a/src/gpu/vulkan/SDL_gpu_vulkan.c +++ b/src/gpu/vulkan/SDL_gpu_vulkan.c @@ -479,6 +479,7 @@ static VkSamplerAddressMode SDLToVK_SamplerAddressMode[] = { typedef struct VulkanMemoryAllocation VulkanMemoryAllocation; typedef struct VulkanBuffer VulkanBuffer; typedef struct VulkanBufferContainer VulkanBufferContainer; +typedef struct VulkanUniformBuffer VulkanUniformBuffer; typedef struct VulkanTexture VulkanTexture; typedef struct VulkanTextureContainer VulkanTextureContainer; @@ -573,6 +574,7 @@ struct VulkanBuffer SDL_AtomicInt referenceCount; bool transitioned; bool markedForDestroy; // so that defrag doesn't double-free + VulkanUniformBuffer *uniformBufferForDefrag; }; struct VulkanBufferContainer @@ -6811,7 +6813,7 @@ static VulkanUniformBuffer *VULKAN_INTERNAL_CreateUniformBuffer( uniformBuffer->drawOffset = 0; uniformBuffer->writeOffset = 0; - uniformBuffer->buffer->container = (VulkanBufferContainer *)uniformBuffer; // little hack for defrag + uniformBuffer->buffer->uniformBufferForDefrag = uniformBuffer; return uniformBuffer; } @@ -10691,7 +10693,7 @@ static bool VULKAN_INTERNAL_DefragmentMemory( newBuffer->container = currentRegion->vulkanBuffer->container; newBuffer->containerIndex = currentRegion->vulkanBuffer->containerIndex; if (newBuffer->type == VULKAN_BUFFER_TYPE_UNIFORM) { - ((VulkanUniformBuffer *)newBuffer->container)->buffer = newBuffer; + currentRegion->vulkanBuffer->uniformBufferForDefrag->buffer = newBuffer; } else { newBuffer->container->buffers[newBuffer->containerIndex] = newBuffer; if (newBuffer->container->activeBuffer == currentRegion->vulkanBuffer) {