VYPR
Low severityNVD Advisory· Published May 14, 2021· Updated Aug 3, 2024

Division by zero in optimized pooling implementations in TFLite

CVE-2021-29586

Description

TensorFlow is an end-to-end open source platform for machine learning. Optimized pooling implementations in TFLite fail to check that the stride arguments are not 0 before calling ComputePaddingHeightWidth(https://github.com/tensorflow/tensorflow/blob/3f24ccd932546416ec906a02ddd183b48a1d2c83/tensorflow/lite/kernels/pooling.cc#L90). Since users can craft special models which will have params->stride_{height,width} be zero, this will result in a division by zero. The fix will be included in TensorFlow 2.5.0. We will also cherrypick this commit on TensorFlow 2.4.2, TensorFlow 2.3.3, TensorFlow 2.2.3 and TensorFlow 2.1.4, as these are also affected and still in supported range.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
tensorflowPyPI
< 2.1.42.1.4
tensorflowPyPI
>= 2.2.0, < 2.2.32.2.3
tensorflowPyPI
>= 2.3.0, < 2.3.32.3.3
tensorflowPyPI
>= 2.4.0, < 2.4.22.4.2
tensorflow-cpuPyPI
< 2.1.42.1.4
tensorflow-cpuPyPI
>= 2.2.0, < 2.2.32.2.3
tensorflow-cpuPyPI
>= 2.3.0, < 2.3.32.3.3
tensorflow-cpuPyPI
>= 2.4.0, < 2.4.22.4.2
tensorflow-gpuPyPI
< 2.1.42.1.4
tensorflow-gpuPyPI
>= 2.2.0, < 2.2.32.2.3
tensorflow-gpuPyPI
>= 2.3.0, < 2.3.32.3.3
tensorflow-gpuPyPI
>= 2.4.0, < 2.4.22.4.2

Affected products

1

Patches

1
5f7975d09eac

Prevent another div by 0 in optimized pooling implementations TFLite

https://github.com/tensorflow/tensorflowMihai MaruseacApr 28, 2021via ghsa
2 files changed · +17 0
  • tensorflow/lite/kernels/pooling.cc+4 0 modified
    @@ -87,6 +87,10 @@ TfLiteStatus GenericPrepare(TfLiteContext* context, TfLiteNode* node) {
       auto padding = params->padding;
       int out_width, out_height;
     
    +  // Prevent division by 0 in optimized pooling implementations
    +  TF_LITE_ENSURE(context, params->stride_height > 0);
    +  TF_LITE_ENSURE(context, params->stride_width > 0);
    +
       data->padding = ComputePaddingHeightWidth(
           params->stride_height, params->stride_width, 1, 1, height, width,
           params->filter_height, params->filter_width, padding, &out_height,
    
  • tensorflow/lite/kernels/pooling_test.cc+13 0 modified
    @@ -1151,5 +1151,18 @@ TEST(FloatPoolingOpTest, L2PoolPaddingValidSlide1) {
       EXPECT_THAT(m.GetOutput(), ElementsAreArray({3.5, 6.0, 6.5}));
     }
     
    +#ifdef GTEST_HAS_DEATH_TEST
    +TEST(FloatPoolingOpTest, MaxPoolWithZeroStride) {
    +  EXPECT_DEATH(
    +      FloatPoolingOpModel m(BuiltinOperator_MAX_POOL_2D,
    +                            /*input=*/{TensorType_FLOAT32, {1, 2, 4, 1}},
    +                            /*filter_width=*/2, /*filter_height=*/2,
    +                            /*output=*/{TensorType_FLOAT32, {}},
    +                            /*padding=*/Padding_VALID,
    +                            /*stride_w=*/0, /*stride_h=*/0),
    +      "Cannot allocate tensors");
    +}
    +#endif
    +
     }  // namespace
     }  // namespace tflite
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

8

News mentions

0

No linked articles in our index yet.