Skip to content

Commit

Permalink
Merge pull request #5859 from paul-elliott-arm/fix_ct_uninit_memory_a…
Browse files Browse the repository at this point in the history
…ccess_2.28

Backport 2.28: Fix uninitialised memory access in constant time functions
  • Loading branch information
gilles-peskine-arm authored Jun 1, 2022
2 parents adf225d + b830028 commit 7bda291
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 2 deletions.
6 changes: 6 additions & 0 deletions library/constant_time.c
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,12 @@ int mbedtls_ct_hmac( mbedtls_md_context_t *ctx,
MD_CHK( mbedtls_md_update( ctx, add_data, add_data_len ) );
MD_CHK( mbedtls_md_update( ctx, data, min_data_len ) );

/* Fill the hash buffer in advance with something that is
* not a valid hash (barring an attack on the hash and
* deliberately-crafted input), in case the caller doesn't
* check the return status properly. */
memset( output, '!', hash_size );

/* For each possible length, compute the hash up to that point */
for( offset = min_data_len; offset <= max_data_len; offset++ )
{
Expand Down
7 changes: 7 additions & 0 deletions library/constant_time_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,13 @@ void mbedtls_ct_memcpy_if_eq( unsigned char *dest,
* offset_secret, but only on \p offset_min, \p offset_max and \p len.
* Functionally equivalent to `memcpy(dst, src + offset_secret, len)`.
*
* \note This function reads from \p dest, but the value that
* is read does not influence the result and this
* function's behavior is well-defined regardless of the
* contents of the buffers. This may result in false
* positives from static or dynamic analyzers, especially
* if \p dest is not initialized.
*
* \param dest The destination buffer. This must point to a writable
* buffer of at least \p len bytes.
* \param src The base of the source buffer. This must point to a
Expand Down
4 changes: 2 additions & 2 deletions library/ssl_msg.c
Original file line number Diff line number Diff line change
Expand Up @@ -1590,8 +1590,8 @@ int mbedtls_ssl_decrypt_buf( mbedtls_ssl_context const *ssl,
#if defined(MBEDTLS_SSL_SOME_MODES_USE_MAC)
if( auth_done == 0 )
{
unsigned char mac_expect[MBEDTLS_SSL_MAC_ADD];
unsigned char mac_peer[MBEDTLS_SSL_MAC_ADD];
unsigned char mac_expect[MBEDTLS_SSL_MAC_ADD] = { 0 };
unsigned char mac_peer[MBEDTLS_SSL_MAC_ADD] = { 0 };

/* If the initial value of padlen was such that
* data_len < maclen + padlen + 1, then padlen
Expand Down

0 comments on commit 7bda291

Please sign in to comment.