Null pointer dereference in `SparseFillEmptyRows`
Description
TensorFlow is an end-to-end open source platform for machine learning. An attacker can trigger a null pointer dereference in the implementation of tf.raw_ops.SparseFillEmptyRows. This is because of missing validation(https://github.com/tensorflow/tensorflow/blob/fdc82089d206e281c628a93771336bf87863d5e8/tensorflow/core/kernels/sparse_fill_empty_rows_op.cc#L230-L231) that was covered under a TODO. If the dense_shape tensor is empty, then dense_shape_t.vec<>() would cause a null pointer dereference in the implementation of the op. 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.
| Package | Affected versions | Patched versions |
|---|---|---|
tensorflowPyPI | < 2.1.4 | 2.1.4 |
tensorflowPyPI | >= 2.2.0, < 2.2.3 | 2.2.3 |
tensorflowPyPI | >= 2.3.0, < 2.3.3 | 2.3.3 |
tensorflowPyPI | >= 2.4.0, < 2.4.2 | 2.4.2 |
tensorflow-cpuPyPI | < 2.1.4 | 2.1.4 |
tensorflow-cpuPyPI | >= 2.2.0, < 2.2.3 | 2.2.3 |
tensorflow-cpuPyPI | >= 2.3.0, < 2.3.3 | 2.3.3 |
tensorflow-cpuPyPI | >= 2.4.0, < 2.4.2 | 2.4.2 |
tensorflow-gpuPyPI | < 2.1.4 | 2.1.4 |
tensorflow-gpuPyPI | >= 2.2.0, < 2.2.3 | 2.2.3 |
tensorflow-gpuPyPI | >= 2.3.0, < 2.3.3 | 2.3.3 |
tensorflow-gpuPyPI | >= 2.4.0, < 2.4.2 | 2.4.2 |
Affected products
1- Range: < 2.1.4
Patches
1faa76f39014eFix heap-buffer-overflow issue with `tf.raw_ops.SparseFillEmptyRows`.
1 file changed · +4 −1
tensorflow/core/kernels/sparse_fill_empty_rows_op.cc+4 −1 modified@@ -228,7 +228,10 @@ void SparseFillEmptyRowsOpImpl(OpKernelContext* context, default_value_t.shape().DebugString()), done); // TODO(ebrevdo): add shape checks between values, indices, - // dense_shape. Also add check that dense rank > 0. + // Also add check that dense rank > 0. + OP_REQUIRES_ASYNC(context, dense_shape_t.NumElements() != 0, + errors::InvalidArgument("Dense shape cannot be empty."), + done); using FunctorType = functor::SparseFillEmptyRows<Device, T, Tindex>; OP_REQUIRES_OK_ASYNC(context,
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- github.com/advisories/GHSA-r6pg-pjwc-j585ghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2021-29565ghsaADVISORY
- github.com/pypa/advisory-database/tree/main/vulns/tensorflow-cpu/PYSEC-2021-493.yamlghsaWEB
- github.com/pypa/advisory-database/tree/main/vulns/tensorflow-gpu/PYSEC-2021-691.yamlghsaWEB
- github.com/pypa/advisory-database/tree/main/vulns/tensorflow/PYSEC-2021-202.yamlghsaWEB
- github.com/tensorflow/tensorflow/commit/faa76f39014ed3b5e2c158593b1335522e573c7fghsax_refsource_MISCWEB
- github.com/tensorflow/tensorflow/security/advisories/GHSA-r6pg-pjwc-j585ghsax_refsource_CONFIRMWEB
News mentions
0No linked articles in our index yet.