Skip to content

Commit 86b1aae

Browse files
authored
Merge pull request #7209 from philljj/zd17416
Coverity issues: fix MD5 and SHA buffer overrun.
2 parents 48e40b8 + 83169f9 commit 86b1aae

4 files changed

Lines changed: 17 additions & 5 deletions

File tree

wolfcrypt/src/md5.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,9 @@ int wc_Md5Final(wc_Md5* md5, byte* hash)
461461

462462
/* pad with zeros */
463463
if (md5->buffLen > WC_MD5_PAD_SIZE) {
464-
XMEMSET(&local[md5->buffLen], 0, WC_MD5_BLOCK_SIZE - md5->buffLen);
464+
if (md5->buffLen < WC_MD5_BLOCK_SIZE) {
465+
XMEMSET(&local[md5->buffLen], 0, WC_MD5_BLOCK_SIZE - md5->buffLen);
466+
}
465467
md5->buffLen += WC_MD5_BLOCK_SIZE - md5->buffLen;
466468

467469
#if defined(BIG_ENDIAN_ORDER) && !defined(FREESCALE_MMCAU_SHA)

wolfcrypt/src/sha.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -841,7 +841,10 @@ int wc_ShaFinal(wc_Sha* sha, byte* hash)
841841

842842
/* pad with zeros */
843843
if (sha->buffLen > WC_SHA_PAD_SIZE) {
844-
XMEMSET(&local[sha->buffLen], 0, WC_SHA_BLOCK_SIZE - sha->buffLen);
844+
if (sha->buffLen < WC_SHA_BLOCK_SIZE) {
845+
XMEMSET(&local[sha->buffLen], 0, WC_SHA_BLOCK_SIZE - sha->buffLen);
846+
}
847+
845848
sha->buffLen += WC_SHA_BLOCK_SIZE - sha->buffLen;
846849

847850
#if defined(WOLFSSL_USE_ESP32_CRYPT_HASH_HW)

wolfcrypt/src/sha256.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1321,8 +1321,11 @@ static int InitSha256(wc_Sha256* sha256)
13211321

13221322
/* pad with zeros */
13231323
if (sha256->buffLen > WC_SHA256_PAD_SIZE) {
1324-
XMEMSET(&local[sha256->buffLen], 0,
1325-
WC_SHA256_BLOCK_SIZE - sha256->buffLen);
1324+
if (sha256->buffLen < WC_SHA256_BLOCK_SIZE) {
1325+
XMEMSET(&local[sha256->buffLen], 0,
1326+
WC_SHA256_BLOCK_SIZE - sha256->buffLen);
1327+
}
1328+
13261329
sha256->buffLen += WC_SHA256_BLOCK_SIZE - sha256->buffLen;
13271330

13281331
#if defined(WOLFSSL_USE_ESP32_CRYPT_HASH_HW) && \

wolfcrypt/src/sha512.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -942,7 +942,11 @@ static WC_INLINE int Sha512Final(wc_Sha512* sha512)
942942

943943
/* pad with zeros */
944944
if (sha512->buffLen > WC_SHA512_PAD_SIZE) {
945-
XMEMSET(&local[sha512->buffLen], 0, WC_SHA512_BLOCK_SIZE - sha512->buffLen);
945+
if (sha512->buffLen < WC_SHA512_BLOCK_SIZE ) {
946+
XMEMSET(&local[sha512->buffLen], 0,
947+
WC_SHA512_BLOCK_SIZE - sha512->buffLen);
948+
}
949+
946950
sha512->buffLen += WC_SHA512_BLOCK_SIZE - sha512->buffLen;
947951
#if defined(LITTLE_ENDIAN_ORDER)
948952
#if defined(USE_INTEL_SPEEDUP) && \

0 commit comments

Comments
 (0)