From 1531bf11e3ea065137562ce29e07ee5e40f3bacc Mon Sep 17 00:00:00 2001 From: Courtney Goeltzenleuchter Date: Thu, 29 Dec 2016 08:46:18 -0700 Subject: vulkan: Correct access after free issue While testing argument validation in the loader, I found that I got SEGFAULTs trying to access the logger class created in LayerChain::CreateDevice. I believe that the logger object was being destroyed at the end of the LayerChain construction statement so that a reference to the logger caused a SEGFAULT. Fix CreateInstance path as well, though the loader doesn't currently call the logger in that path, so no way to verify. Test: run vkCreateDevice_test on Vulkan device. See tests/README.md for details Bug: 33783620 Change-Id: Ib46023e8a8dfa008510c655c5b216aabaaf2ea83 --- vulkan/libvulkan/api.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'vulkan/libvulkan/api.cpp') diff --git a/vulkan/libvulkan/api.cpp b/vulkan/libvulkan/api.cpp index 4d30bbb965..f5daca7020 100644 --- a/vulkan/libvulkan/api.cpp +++ b/vulkan/libvulkan/api.cpp @@ -1049,7 +1049,8 @@ VkBool32 LayerChain::DebugReportCallback(VkDebugReportFlagsEXT flags, VkResult LayerChain::CreateInstance(const VkInstanceCreateInfo* create_info, const VkAllocationCallbacks* allocator, VkInstance* instance_out) { - LayerChain chain(true, driver::DebugReportLogger(*create_info), + const driver::DebugReportLogger logger(*create_info); + LayerChain chain(true, logger, (allocator) ? *allocator : driver::GetDefaultAllocator()); VkResult result = chain.ActivateLayers(create_info->ppEnabledLayerNames, @@ -1074,8 +1075,9 @@ VkResult LayerChain::CreateDevice(VkPhysicalDevice physical_dev, const VkDeviceCreateInfo* create_info, const VkAllocationCallbacks* allocator, VkDevice* dev_out) { + const driver::DebugReportLogger logger = driver::Logger(physical_dev); LayerChain chain( - false, driver::Logger(physical_dev), + false, logger, (allocator) ? *allocator : driver::GetData(physical_dev).allocator); VkResult result = chain.ActivateLayers( -- cgit v1.2.3-59-g8ed1b