Skip to content

Commit 03fbcef

Browse files
JacobSzwejbkafacebook-github-bot
authored andcommitted
Validate kTensorDimensionLimit (#12684)
Summary: Need to check this limit at deserialization since the ops rely on it Reviewed By: larryliu0820 Differential Revision: D78675986
1 parent 413dee4 commit 03fbcef

File tree

3 files changed

+12
-1
lines changed

3 files changed

+12
-1
lines changed

runtime/executor/targets.bzl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ def define_common_targets():
133133
],
134134
deps = [
135135
"//executorch/schema:program",
136+
"//executorch/runtime/core/exec_aten/util:tensor_dimension_limit"
136137
],
137138
visibility = [
138139
"//executorch/runtime/executor/...",

runtime/executor/tensor_parser_aten.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#include <executorch/runtime/core/exec_aten/util/dim_order_util.h>
1212
#include <executorch/runtime/core/exec_aten/util/scalar_type_util.h>
13+
#include <executorch/runtime/core/exec_aten/util/tensor_dimension_limit.h>
1314
#include <executorch/runtime/core/named_data_map.h>
1415
#include <executorch/runtime/executor/memory_manager.h>
1516
#include <executorch/runtime/executor/program.h>
@@ -58,6 +59,10 @@ Result<at::Tensor> parseTensor(
5859
s_tensor->sizes() != nullptr, InvalidProgram, "Missing sizes field");
5960
size_t ndim = s_tensor->sizes()->size();
6061

62+
ET_CHECK_OR_RETURN_ERROR(
63+
ndim <= kTensorDimensionLimit, InvalidProgram, "Tensor rank too large %" ET_PRIsize_t " > %" ET_PRIsize_t, ndim, kTensorDimensionLimit
64+
)
65+
6166
ET_CHECK_OR_RETURN_ERROR(
6267
s_tensor->dim_order() != nullptr,
6368
InvalidProgram,

runtime/executor/tensor_parser_portable.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <executorch/runtime/core/exec_aten/exec_aten.h>
1212
#include <executorch/runtime/core/exec_aten/util/dim_order_util.h>
1313
#include <executorch/runtime/core/exec_aten/util/scalar_type_util.h>
14+
#include <executorch/runtime/core/exec_aten/util/tensor_dimension_limit.h>
1415
#include <executorch/runtime/core/named_data_map.h>
1516
#include <executorch/runtime/executor/memory_manager.h>
1617
#include <executorch/runtime/executor/program.h>
@@ -60,7 +61,11 @@ Result<Tensor> parseTensor(
6061
ET_CHECK_OR_RETURN_ERROR(
6162
s_tensor->sizes() != nullptr, InvalidProgram, "Missing sizes field");
6263
const auto serialized_sizes = s_tensor->sizes()->data();
63-
const auto dim = s_tensor->sizes()->size();
64+
const size_t dim = s_tensor->sizes()->size();
65+
66+
ET_CHECK_OR_RETURN_ERROR(
67+
dim <= kTensorDimensionLimit, InvalidProgram, "Tensor rank too large %" ET_PRIsize_t " > %" ET_PRIsize_t, dim, kTensorDimensionLimit
68+
)
6469

6570
ET_CHECK_OR_RETURN_ERROR(
6671
s_tensor->dim_order() != nullptr,

0 commit comments

Comments
 (0)