IVGCVSW-4375 Fixed driver crashes
* Fixed driver crashes caused by ignoring the result of GetTensorInt32Values.
* Fixed driver crashes where padding, axis, permutation dimension or block size operands were inputs.
Signed-off-by: Mike Kelly <mike.kelly@arm.com>
Change-Id: I59867e9545a240e6be46b7f68da6adaa120a56d8
diff --git a/ConversionUtils.hpp b/ConversionUtils.hpp
index 550c320..5c6238e 100644
--- a/ConversionUtils.hpp
+++ b/ConversionUtils.hpp
@@ -1399,7 +1399,10 @@
}
std::vector<int32_t> paddings;
- GetTensorInt32Values<HalPolicy>(*paddingsOperand, paddings, model, data);
+ if (!GetTensorInt32Values<HalPolicy>(*paddingsOperand, paddings, model, data))
+ {
+ return Fail("%s: Operation has invalid or unsupported paddings operand", __func__);
+ }
// add padding for each dimension of input tensor.
for (unsigned int i = 0; i < paddings.size() - 1; i += 2)
@@ -3271,9 +3274,9 @@
axis.assign(dimensionSequence,
dimensionSequence + rank);
}
- else
+ else if (!GetTensorInt32Values<HalPolicy>(*axisOperand, axis, model, data))
{
- GetTensorInt32Values<HalPolicy>(*axisOperand, axis, model, data);
+ return Fail("%s: Operation has an invalid or unsupported axis operand", __func__);
}
std::vector<uint32_t> outputDims;
@@ -3451,9 +3454,9 @@
perm[rank - i] = boost::numeric_cast<int> (i - 1);
}
}
- else
+ else if (!GetTensorInt32Values<HalPolicy>(*permOperand, perm, model, data))
{
- GetTensorInt32Values<HalPolicy>(*permOperand, perm, model, data);
+ return Fail("%s: Operation has an invalid or unsupported permutation operand", __func__);
}
std::vector<uint32_t> outputDims(perm.begin(), perm.begin() + rank);
@@ -3634,7 +3637,10 @@
}
std::vector<int32_t> blockShape;
- GetTensorInt32Values<HalPolicy>(*blockShapeOperand, blockShape, model, data);
+ if (!GetTensorInt32Values<HalPolicy>(*blockShapeOperand, blockShape, model, data))
+ {
+ return Fail("%s: Operation has an invalid or unsupported block size operand", __func__);
+ }
if (std::any_of(blockShape.cbegin(), blockShape.cend(), [](int32_t i){ return i < 1; }))
{
return Fail("%s: Block shape must be at least 1 in all dimensions.", __func__);
@@ -3648,7 +3654,10 @@
std::vector<std::pair<unsigned int, unsigned int>> paddingList;
std::vector<int32_t> paddings;
- GetTensorInt32Values<HalPolicy>(*paddingsOperand, paddings, model, data);
+ if (!GetTensorInt32Values<HalPolicy>(*paddingsOperand, paddings, model, data))
+ {
+ return Fail("%s: Operation has an invalid or unsupported paddings operand", __func__);
+ }
for (unsigned int i = 0; i < paddings.size() - 1; i += 2)
{
int paddingBeforeInput = paddings[i];