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

CHECK-fail due to integer overflow

CVE-2021-29584

Description

TensorFlow is an end-to-end open source platform for machine learning. An attacker can trigger a denial of service via a CHECK-fail in caused by an integer overflow in constructing a new tensor shape. This is because the implementation(https://github.com/tensorflow/tensorflow/blob/0908c2f2397c099338b901b067f6495a5b96760b/tensorflow/core/kernels/sparse_split_op.cc#L66-L70) builds a dense shape without checking that the dimensions would not result in overflow. The TensorShape constructor(https://github.com/tensorflow/tensorflow/blob/6f9896890c4c703ae0a0845394086e2e1e523299/tensorflow/core/framework/tensor_shape.cc#L183-L188) uses a CHECK operation which triggers when InitDims(https://github.com/tensorflow/tensorflow/blob/6f9896890c4c703ae0a0845394086e2e1e523299/tensorflow/core/framework/tensor_shape.cc#L212-L296) returns a non-OK status. This is a legacy implementation of the constructor and operations should use BuildTensorShapeBase or AddDimWithStatus to prevent CHECK-failures in the presence of overflows. 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
4c0ee937c0f6

Prevent overflow in sparse op

https://github.com/tensorflow/tensorflowMihai MaruseacMay 6, 2021via ghsa
1 file changed · +10 3
  • tensorflow/core/kernels/sparse_split_op.cc+10 3 modified
    @@ -63,11 +63,18 @@ class SparseSplitOp : public OpKernel {
                                             input_shape.vec<int64>()(axis),
                                             "), got ", num_split_));
     
    +    // Prevent overflow by constructing the dense shape separately
    +    TensorShape dense_shape;
    +    const auto input_shape_flat = input_shape.flat<int64>();
    +    for (int i = 0; i < input_shape.NumElements(); i++) {
    +      OP_REQUIRES_OK(context,
    +                     dense_shape.AddDimWithStatus(input_shape_flat(i)));
    +    }
    +
         sparse::SparseTensor sparse_tensor;
         OP_REQUIRES_OK(context,
    -                   sparse::SparseTensor::Create(
    -                       input_indices, input_values,
    -                       TensorShape(input_shape.vec<int64>()), &sparse_tensor));
    +                   sparse::SparseTensor::Create(input_indices, input_values,
    +                                                dense_shape, &sparse_tensor));
     
         std::vector<sparse::SparseTensor> outputs;
         OP_REQUIRES_OK(context, sparse::SparseTensor::Split<T>(
    

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

7

News mentions

0

No linked articles in our index yet.