aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Kunze <eric.kunze@arm.com>2022-10-14 13:33:58 -0700
committerEric Kunze <eric.kunze@arm.com>2022-10-18 16:04:45 -0700
commit4196491afc23d375b5476b05be16defeed4eadad (patch)
tree1244a4b126fc3a746e7b8fddaeb817408831cc05
parentbc2a3db54ecee48fe2236f7fc03da8fd07d81ca0 (diff)
downloadreference_model-4196491afc23d375b5476b05be16defeed4eadad.tar.gz
Update to check tensor size is valid
Validate tensor arguments Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: Iac398f2c3e600944c6f65c3d8433bd17095f820b
-rw-r--r--reference_model/src/subgraph_traverser.cc9
-rw-r--r--reference_model/src/tosa_model_types.h22
2 files changed, 31 insertions, 0 deletions
diff --git a/reference_model/src/subgraph_traverser.cc b/reference_model/src/subgraph_traverser.cc
index 15d82e6..ae216d8 100644
--- a/reference_model/src/subgraph_traverser.cc
+++ b/reference_model/src/subgraph_traverser.cc
@@ -14,6 +14,7 @@
// limitations under the License.
#include "subgraph_traverser.h"
+#include "tosa_model_types.h"
#ifndef SUBGRAPH_ERROR_IF
#define SUBGRAPH_ERROR_IF(COND, fmt, ...) \
@@ -323,6 +324,7 @@ int SubgraphTraverser::allocateTensor()
auto got = used_tensor_name_set.find(ts->GetName());
if (got != used_tensor_name_set.end())
{
+ uint32_t elements = 1;
for (auto& dim : ts->GetShape())
{
if (dim <= 0)
@@ -331,6 +333,13 @@ int SubgraphTraverser::allocateTensor()
this->setGraphStatus(GraphStatus::TOSA_UNPREDICTABLE);
return 1;
}
+ if (dim > static_cast<int32_t>(TOSA_MAX_TENSOR_SIZE / elements))
+ {
+ // Size greather than maximum defined in spec
+ DEBUG_INFO(GT, "Tensor %s size is greater than allowed maximum", ts->GetName().c_str());
+ this->setGraphStatus(GraphStatus::TOSA_UNPREDICTABLE);
+ return 1;
+ }
}
}
diff --git a/reference_model/src/tosa_model_types.h b/reference_model/src/tosa_model_types.h
new file mode 100644
index 0000000..84402ae
--- /dev/null
+++ b/reference_model/src/tosa_model_types.h
@@ -0,0 +1,22 @@
+// Copyright (c) 2022, ARM Limited.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef TOSA_MODEL_TYPES_H
+#define TOSA_MODEL_TYPES_H
+
+#include <inttypes.h>
+
+inline const uint32_t TOSA_MAX_TENSOR_SIZE = ((1u << 31) - 1);
+
+#endif // TOSA_MODEL_TYPES_H \ No newline at end of file