diff options
author | Matthew Bentham <matthew.bentham@arm.com> | 2021-06-29 15:18:32 +0100 |
---|---|---|
committer | Matthew Bentham <matthew.bentham@arm.com> | 2021-06-29 15:23:30 +0100 |
commit | 6f24b1aac9cbf5dfb3918cb59a7e903ddcec420e (patch) | |
tree | d2e5695e692807d8767206eb151f3e0378f0b16f /src | |
parent | b082ed076b489f17bad3663005801b251d642108 (diff) | |
download | armnn-6f24b1aac9cbf5dfb3918cb59a7e903ddcec420e.tar.gz |
Fix segfault in IsLayerSupportedTests
DummyLayer<> was not implemented for QLstmLayer, so the default
implementation was getting called. This caused null weights
to be dereferenced in WorkloadFactory during IsLayerSupportedTests.
While this would often not cause a crash, it could be reliably
detected by running the UnitTests with Undefined Behavior Sanitizer.
Change-Id: I7a49b18b8292632436b0aae52d6607e28fdd1839
Signed-off-by: Matthew Bentham <matthew.bentham@arm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/backends/backendsCommon/WorkloadFactory.cpp | 3 | ||||
-rw-r--r-- | src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp | 14 |
2 files changed, 10 insertions, 7 deletions
diff --git a/src/backends/backendsCommon/WorkloadFactory.cpp b/src/backends/backendsCommon/WorkloadFactory.cpp index 61ad20995b..dc70e6a9c2 100644 --- a/src/backends/backendsCommon/WorkloadFactory.cpp +++ b/src/backends/backendsCommon/WorkloadFactory.cpp @@ -834,6 +834,9 @@ bool IWorkloadFactory::IsLayerConfigurationSupported(const BackendId& backendId, LstmInputParamsInfo paramsInfo; // Basic parameters + ARMNN_ASSERT(cLayer->m_BasicParameters.m_InputToForgetWeights.get() != nullptr); + ARMNN_ASSERT(cLayer->m_BasicParameters.m_InputToCellWeights.get() != nullptr); + ARMNN_ASSERT(cLayer->m_BasicParameters.m_InputToOutputWeights.get() != nullptr); paramsInfo.m_InputToForgetWeights = &cLayer->m_BasicParameters.m_InputToForgetWeights->GetTensorInfo(); paramsInfo.m_InputToCellWeights = &cLayer->m_BasicParameters.m_InputToCellWeights->GetTensorInfo(); paramsInfo.m_InputToOutputWeights = &cLayer->m_BasicParameters.m_InputToOutputWeights->GetTensorInfo(); diff --git a/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp b/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp index adc7bc4c3c..ddd6eacb6d 100644 --- a/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp +++ b/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp @@ -300,7 +300,7 @@ struct DummyLstmLayer typename LstmLayerType::DescriptorType desc; desc.m_CifgEnabled = false; - m_Layer = dummyGraph.AddLayer<LstmLayerType>(armnn::LstmDescriptor(), ""); + m_Layer = dummyGraph.AddLayer<LstmLayerType>(desc, ""); m_Layer->m_BasicParameters.m_InputToForgetWeights = std::make_unique<armnn::ScopedTensorHandle>( armnn::TensorInfo(armnn::TensorShape({1,1,1,1}), armnn::DataType::Float32)); m_Layer->m_BasicParameters.m_InputToCellWeights = std::make_unique<armnn::ScopedTensorHandle>( @@ -342,18 +342,18 @@ struct DummyLayer<armnn::LstmLayer> { }; -template <typename QLstmLayerType> -struct DummyQLstmLayer +template<> +struct DummyLayer<armnn::QLstmLayer> { - DummyQLstmLayer() + DummyLayer() { - typename QLstmLayerType::DescriptorType desc; + armnn::QLstmLayer::DescriptorType desc; desc.m_CifgEnabled = false; desc.m_PeepholeEnabled = true; desc.m_ProjectionEnabled = true; desc.m_LayerNormEnabled = true; - m_Layer = dummyGraph.AddLayer<QLstmLayerType>(armnn::QLstmDescriptor(), "qLstm"); + m_Layer = dummyGraph.AddLayer<armnn::QLstmLayer>(desc, "qLstm"); // Basic params m_Layer->m_BasicParameters.m_InputToForgetWeights = std::make_unique<armnn::ScopedTensorHandle>( @@ -410,7 +410,7 @@ struct DummyQLstmLayer armnn::TensorInfo(armnn::TensorShape({1,1,1,1}), armnn::DataType::QSymmS16)); } - ~DummyQLstmLayer() + ~DummyLayer() { dummyGraph.EraseLayer(m_Layer); } |