summaryrefslogtreecommitdiffstats
path: root/src/H5Oattr.c
diff options
context:
space:
mode:
authorBinh-Minh Ribler <bmribler@hdfgroup.org>2019-01-15 17:48:31 (GMT)
committerBinh-Minh Ribler <bmribler@hdfgroup.org>2019-01-15 17:48:31 (GMT)
commitbc3d878add940845a2ec5b8873f2d45a00926ce8 (patch)
tree2d021b79914677ebe82be9f57e41351f1cf8835a /src/H5Oattr.c
parent90d13bef33f9e2e80b23996a0c39f16f7c34ecf8 (diff)
downloadhdf5-bc3d878add940845a2ec5b8873f2d45a00926ce8.zip
hdf5-bc3d878add940845a2ec5b8873f2d45a00926ce8.tar.gz
hdf5-bc3d878add940845a2ec5b8873f2d45a00926ce8.tar.bz2
Fixed HDFFV-10586 and HDFFV-10588
Description: HDFFV-10586 CVE-2018-17434 Divide by zero inh5repack_filters Added a check for zero value HDFFV-10588 CVE-2018-17437 Memory leak in H5O_dtype_decode_helper This is actually an Invalid read issue. It was found that the attribute name length in an attribute message was corrupted, which caused the buffer pointer to be advanced too far and later caused an invalid read. Added a check to detect attribute name and its length mismatch. The fix is not perfect, but it'll reduce the chance of this issue when a name length is corrupted or the attribute name is corrupted. Platforms tested: Linux/64 (jelly) Linux/64 (platypus) Darwin (osx1010test)
Diffstat (limited to 'src/H5Oattr.c')
-rw-r--r--src/H5Oattr.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/H5Oattr.c b/src/H5Oattr.c
index c93bf32..c420046 100644
--- a/src/H5Oattr.c
+++ b/src/H5Oattr.c
@@ -176,7 +176,12 @@ H5O_attr_decode(H5F_t *f, H5O_t *open_oh, unsigned H5_ATTR_UNUSED mesg_flags,
/* Decode and store the name */
if(NULL == (attr->shared->name = H5MM_strdup((const char *)p)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+ /* Make an attempt to detect corrupted name or name length - HDFFV-10588 */
+ if(name_len != (HDstrlen(attr->shared->name) + 1))
+ HGOTO_ERROR(H5E_ATTR, H5E_CANTDECODE, NULL, "attribute name has different length than stored length")
+
if(attr->shared->version < H5O_ATTR_VERSION_2)
p += H5O_ALIGN_OLD(name_len); /* advance the memory pointer */
else