Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1531bf11 authored by Courtney Goeltzenleuchter's avatar Courtney Goeltzenleuchter
Browse files

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
parent 02400591
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -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(