Fix memory corruption vktApiObjectManagementTests
authorBoris Zanin <boris.zanin@mobica.com>
Thu, 7 Sep 2017 08:18:07 +0000 (10:18 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 26 Sep 2017 13:01:58 +0000 (09:01 -0400)
Due to s_deviceCases, s_deviceGroupCases are declared as non-static
arrays the pointers to these structures cannot be included into
static arrays such as s_createSingleGroup,
s_createMultipleUniqueResourcesGroup, etc.

During second call references in arrays like s_createSingleGroup,
s_createMultipleUniqueResourcesGroup, etc will point to invalid
memory and most likely will lead to crash.

Fix: make dependend structures also non-static.

Update tests:
 * dEQP-VK.api.object_management.*

Components: Vulkan

VK-GL-CTS issue: 674

Change-Id: I83732c243f407d620f3d612c4f10435965e36080

external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp

index 613d696..fbdd485 100644 (file)
@@ -2872,7 +2872,7 @@ tcu::TestCaseGroup* createObjectManagementTests (tcu::TestContext& testCtx)
 
        const DescriptorSetLayout::Parameters   singleUboDescLayout     = DescriptorSetLayout::Parameters::single(0u, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1u, VK_SHADER_STAGE_VERTEX_BIT);
 
-       static NamedParameters<Instance>                                        s_instanceCases[]                               =
+       static const NamedParameters<Instance>                          s_instanceCases[]                               =
        {
                { "instance",                                   Instance::Parameters() },
        };
@@ -2992,7 +2992,7 @@ tcu::TestCaseGroup* createObjectManagementTests (tcu::TestContext& testCtx)
                { "command_buffer_secondary",   CommandBuffer::Parameters(CommandPool::Parameters((VkCommandPoolCreateFlags)0u), VK_COMMAND_BUFFER_LEVEL_SECONDARY)     }
        };
 
-       static const CaseDescriptions   s_createSingleGroup     =
+       const CaseDescriptions  s_createSingleGroup     =
        {
                CASE_DESC(createSingleTest      <Instance>,                                     s_instanceCases),
                CASE_DESC(createSingleTest      <Device>,                                       s_deviceCases),
@@ -3022,7 +3022,7 @@ tcu::TestCaseGroup* createObjectManagementTests (tcu::TestContext& testCtx)
        };
        objectMgmtTests->addChild(createGroup(testCtx, "single", "Create single object", s_createSingleGroup));
 
-       static const CaseDescriptions   s_createMultipleUniqueResourcesGroup    =
+       const CaseDescriptions  s_createMultipleUniqueResourcesGroup    =
        {
                CASE_DESC(createMultipleUniqueResourcesTest     <Instance>,                                     s_instanceCases),
                CASE_DESC(createMultipleUniqueResourcesTest     <Device>,                                       s_deviceCases),
@@ -3052,7 +3052,7 @@ tcu::TestCaseGroup* createObjectManagementTests (tcu::TestContext& testCtx)
        };
        objectMgmtTests->addChild(createGroup(testCtx, "multiple_unique_resources", "Multiple objects with per-object unique resources", s_createMultipleUniqueResourcesGroup));
 
-       static const CaseDescriptions   s_createMultipleSharedResourcesGroup    =
+       const CaseDescriptions  s_createMultipleSharedResourcesGroup    =
        {
                EMPTY_CASE_DESC(Instance), // No resources used
                CASE_DESC(createMultipleSharedResourcesTest     <Device>,                                       s_deviceCases),
@@ -3082,7 +3082,7 @@ tcu::TestCaseGroup* createObjectManagementTests (tcu::TestContext& testCtx)
        };
        objectMgmtTests->addChild(createGroup(testCtx, "multiple_shared_resources", "Multiple objects with shared resources", s_createMultipleSharedResourcesGroup));
 
-       static const CaseDescriptions   s_createMaxConcurrentGroup      =
+       const CaseDescriptions  s_createMaxConcurrentGroup      =
        {
                CASE_DESC(createMaxConcurrentTest       <Instance>,                                     s_instanceCases),
                CASE_DESC(createMaxConcurrentTest       <Device>,                                       s_deviceCases),
@@ -3112,7 +3112,7 @@ tcu::TestCaseGroup* createObjectManagementTests (tcu::TestContext& testCtx)
        };
        objectMgmtTests->addChild(createGroup(testCtx, "max_concurrent", "Maximum number of concurrently live objects", s_createMaxConcurrentGroup));
 
-       static const CaseDescriptions   s_multithreadedCreatePerThreadDeviceGroup       =
+       const CaseDescriptions  s_multithreadedCreatePerThreadDeviceGroup       =
        {
                EMPTY_CASE_DESC(Instance),              // Does not make sense
                EMPTY_CASE_DESC(Device),                // Does not make sense
@@ -3142,7 +3142,7 @@ tcu::TestCaseGroup* createObjectManagementTests (tcu::TestContext& testCtx)
        };
        objectMgmtTests->addChild(createGroup(testCtx, "multithreaded_per_thread_device", "Multithreaded object construction with per-thread device ", s_multithreadedCreatePerThreadDeviceGroup));
 
-       static const CaseDescriptions   s_multithreadedCreatePerThreadResourcesGroup    =
+       const CaseDescriptions  s_multithreadedCreatePerThreadResourcesGroup    =
        {
                CASE_DESC(multithreadedCreatePerThreadResourcesTest     <Instance>,                                     s_instanceCases),
                CASE_DESC(multithreadedCreatePerThreadResourcesTest     <Device>,                                       s_deviceCases),
@@ -3172,7 +3172,7 @@ tcu::TestCaseGroup* createObjectManagementTests (tcu::TestContext& testCtx)
        };
        objectMgmtTests->addChild(createGroup(testCtx, "multithreaded_per_thread_resources", "Multithreaded object construction with per-thread resources", s_multithreadedCreatePerThreadResourcesGroup));
 
-       static const CaseDescriptions   s_multithreadedCreateSharedResourcesGroup       =
+       const CaseDescriptions  s_multithreadedCreateSharedResourcesGroup       =
        {
                EMPTY_CASE_DESC(Instance),
                CASE_DESC(multithreadedCreateSharedResourcesTest        <Device>,                                       s_deviceCases),
@@ -3202,7 +3202,7 @@ tcu::TestCaseGroup* createObjectManagementTests (tcu::TestContext& testCtx)
        };
        objectMgmtTests->addChild(createGroup(testCtx, "multithreaded_shared_resources", "Multithreaded object construction with shared resources", s_multithreadedCreateSharedResourcesGroup));
 
-       static const CaseDescriptions   s_createSingleAllocCallbacksGroup       =
+       const CaseDescriptions  s_createSingleAllocCallbacksGroup       =
        {
                CASE_DESC(createSingleAllocCallbacksTest        <Instance>,                                     s_instanceCases),
                CASE_DESC(createSingleAllocCallbacksTest        <Device>,                                       s_deviceCases),
@@ -3233,7 +3233,7 @@ tcu::TestCaseGroup* createObjectManagementTests (tcu::TestContext& testCtx)
        objectMgmtTests->addChild(createGroup(testCtx, "single_alloc_callbacks", "Create single object", s_createSingleAllocCallbacksGroup));
 
        // \note Skip pooled objects in this test group. They are properly handled by the "multiple" group farther down below.
-       static const CaseDescriptions   s_allocCallbackFailGroup        =
+       const CaseDescriptions  s_allocCallbackFailGroup        =
        {
                CASE_DESC(allocCallbackFailTest <Instance>,                                     s_instanceCases),
                CASE_DESC(allocCallbackFailTest <Device>,                                       s_deviceCases),
@@ -3264,7 +3264,7 @@ tcu::TestCaseGroup* createObjectManagementTests (tcu::TestContext& testCtx)
        objectMgmtTests->addChild(createGroup(testCtx, "alloc_callback_fail", "Allocation callback failure", s_allocCallbackFailGroup));
 
        // \note Test objects that can be created in bulk
-       static const CaseDescriptions   s_allocCallbackFailMultipleObjectsGroup =
+       const CaseDescriptions  s_allocCallbackFailMultipleObjectsGroup =
        {
                EMPTY_CASE_DESC(Instance),                      // most objects can be created one at a time only
                EMPTY_CASE_DESC(Device),