COMPMID-1139: Fix SIGSEGV in arm_compute_benchmark
Invalid boundary checks.
Change-Id: I9c346dc15d2080f710b283364e83831fa3466941
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/131029
Tested-by: Jenkins <bsgcomp@arm.com>
Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
diff --git a/src/core/NEON/kernels/NEPoolingLayerKernel.cpp b/src/core/NEON/kernels/NEPoolingLayerKernel.cpp
index be706e2..7877cf5 100644
--- a/src/core/NEON/kernels/NEPoolingLayerKernel.cpp
+++ b/src/core/NEON/kernels/NEPoolingLayerKernel.cpp
@@ -2143,14 +2143,14 @@
for(int y = 0; y < pool_size_y; ++y)
{
- if(y + idx_height > window_input.z().end() || y + idx_height - pool_pad_top < window_input.z().start())
+ if(y + idx_height - pool_pad_top >= window_input.z().end() || y + idx_height - pool_pad_top < window_input.z().start())
{
continue;
}
for(int x = 0; x < pool_size_x; ++x)
{
- if(x + idx_width > window_input.y().end() || x + idx_width - pool_pad_left < window_input.y().start())
+ if(x + idx_width - pool_pad_left >= window_input.y().end() || x + idx_width - pool_pad_left < window_input.y().start())
{
continue;
}
@@ -2374,14 +2374,14 @@
for(int y = 0; y < pool_size_y; ++y)
{
- if(y + idx_height > window_input.z().end() || y + idx_height - pool_pad_top < window_input.z().start())
+ if(y + idx_height - pool_pad_top >= window_input.z().end() || y + idx_height - pool_pad_top < window_input.z().start())
{
continue;
}
for(int x = 0; x < pool_size_x; ++x)
{
- if(x + idx_width > window_input.y().end() || x + idx_width - pool_pad_left < window_input.y().start())
+ if(x + idx_width - pool_pad_left >= window_input.y().end() || x + idx_width - pool_pad_left < window_input.y().start())
{
continue;
}
@@ -2408,14 +2408,14 @@
vres = vdupq_n_f32(std::numeric_limits<float>::lowest());
for(int y = 0; y < pool_size_y; ++y)
{
- if(y + idx_height > window_input.z().end() || y + idx_height - pool_pad_top < window_input.z().start())
+ if(y + idx_height - pool_pad_top >= window_input.z().end() || y + idx_height - pool_pad_top < window_input.z().start())
{
continue;
}
for(int x = 0; x < pool_size_x; ++x)
{
- if(x + idx_width > window_input.y().end() || x + idx_width - pool_pad_left < window_input.y().start())
+ if(x + idx_width - pool_pad_left >= window_input.y().end() || x + idx_width - pool_pad_left < window_input.y().start())
{
continue;
}
@@ -2571,14 +2571,14 @@
// Perform pooling
for(int y = 0; y < pool_size_y; ++y)
{
- if(y + idx_height > window_input.z().end() || y + idx_height - pool_pad_top < window_input.z().start())
+ if(y + idx_height - pool_pad_top >= window_input.z().end() || y + idx_height - pool_pad_top < window_input.z().start())
{
continue;
}
for(int x = 0; x < pool_size_x; ++x)
{
- if(x + idx_width > window_input.y().end() || x + idx_width - pool_pad_left < window_input.y().start())
+ if(x + idx_width - pool_pad_left >= window_input.y().end() || x + idx_width - pool_pad_left < window_input.y().start())
{
continue;
}
@@ -2606,14 +2606,14 @@
for(int y = 0; y < pool_size_y; ++y)
{
- if(y + idx_height > window_input.z().end() || y + idx_height - pool_pad_top < window_input.z().start())
+ if(y + idx_height - pool_pad_top >= window_input.z().end() || y + idx_height - pool_pad_top < window_input.z().start())
{
continue;
}
for(int x = 0; x < pool_size_x; ++x)
{
- if(x + idx_width > window_input.y().end() || x + idx_width - pool_pad_left < window_input.y().start())
+ if(x + idx_width - pool_pad_left >= window_input.y().end() || x + idx_width - pool_pad_left < window_input.y().start())
{
continue;
}