mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-11-22 12:05:36 +01:00
Fix missing bound check
This commit is contained in:
parent
f5f25b3a0d
commit
5cb4b31057
@ -9,6 +9,10 @@ Features
|
|||||||
* Add support for Extended Master Secret (draft-ietf-tls-session-hash)
|
* Add support for Extended Master Secret (draft-ietf-tls-session-hash)
|
||||||
* Add support for Encrypt-then-MAC (RFC 7366)
|
* Add support for Encrypt-then-MAC (RFC 7366)
|
||||||
|
|
||||||
|
Bugfix
|
||||||
|
* Stack buffer overflow if ctr_drbg_update() is called with too large
|
||||||
|
add_len (found by Jean-Philippe Aumasson) (not triggerable remotely).
|
||||||
|
|
||||||
= PolarSSL 1.3.9 released 2014-10-20
|
= PolarSSL 1.3.9 released 2014-10-20
|
||||||
Security
|
Security
|
||||||
* Lowest common hash was selected from signature_algorithms extension in
|
* Lowest common hash was selected from signature_algorithms extension in
|
||||||
|
@ -188,6 +188,10 @@ int ctr_drbg_reseed( ctr_drbg_context *ctx,
|
|||||||
* \param ctx CTR_DRBG context
|
* \param ctx CTR_DRBG context
|
||||||
* \param additional Additional data to update state with
|
* \param additional Additional data to update state with
|
||||||
* \param add_len Length of additional data
|
* \param add_len Length of additional data
|
||||||
|
*
|
||||||
|
* \note If add_len is greater than CTR_DRBG_MAX_SEED_INPUT,
|
||||||
|
* only the first CTR_DRBG_MAX_SEED_INPUT bytes are used,
|
||||||
|
* the remaining ones are silently discarded.
|
||||||
*/
|
*/
|
||||||
void ctr_drbg_update( ctr_drbg_context *ctx,
|
void ctr_drbg_update( ctr_drbg_context *ctx,
|
||||||
const unsigned char *additional, size_t add_len );
|
const unsigned char *additional, size_t add_len );
|
||||||
|
@ -137,6 +137,9 @@ static int block_cipher_df( unsigned char *output,
|
|||||||
int i, j;
|
int i, j;
|
||||||
size_t buf_len, use_len;
|
size_t buf_len, use_len;
|
||||||
|
|
||||||
|
if( data_len > CTR_DRBG_MAX_SEED_INPUT )
|
||||||
|
return( POLARSSL_ERR_CTR_DRBG_INPUT_TOO_BIG );
|
||||||
|
|
||||||
memset( buf, 0, CTR_DRBG_MAX_SEED_INPUT + CTR_DRBG_BLOCKSIZE + 16 );
|
memset( buf, 0, CTR_DRBG_MAX_SEED_INPUT + CTR_DRBG_BLOCKSIZE + 16 );
|
||||||
aes_init( &aes_ctx );
|
aes_init( &aes_ctx );
|
||||||
|
|
||||||
@ -256,6 +259,11 @@ void ctr_drbg_update( ctr_drbg_context *ctx,
|
|||||||
|
|
||||||
if( add_len > 0 )
|
if( add_len > 0 )
|
||||||
{
|
{
|
||||||
|
/* MAX_INPUT would be more logical here, but we have to match
|
||||||
|
* block_cipher_df()'s limits since we can't propagate errors */
|
||||||
|
if( add_len > CTR_DRBG_MAX_SEED_INPUT )
|
||||||
|
add_len = CTR_DRBG_MAX_SEED_INPUT;
|
||||||
|
|
||||||
block_cipher_df( add_input, additional, add_len );
|
block_cipher_df( add_input, additional, add_len );
|
||||||
ctr_drbg_update_internal( ctx, add_input );
|
ctr_drbg_update_internal( ctx, add_input );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user