aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Bentham <matthew.bentham@arm.com>2021-06-29 15:18:32 +0100
committerMatthew Bentham <matthew.bentham@arm.com>2021-06-29 15:23:30 +0100
commit6f24b1aac9cbf5dfb3918cb59a7e903ddcec420e (patch)
treed2e5695e692807d8767206eb151f3e0378f0b16f
parentb082ed076b489f17bad3663005801b251d642108 (diff)
downloadarmnn-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>
-rw-r--r--src/backends/backendsCommon/WorkloadFactory.cpp3
-rw-r--r--src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp14
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);
}