Skip to content

Commit e98bbbe

Browse files
Merge pull request #3925 from rodrigo-dc/mbedtls-2.16
Backport 2.16: Fix build failure on gcc-11
2 parents bc60d69 + d2d0e70 commit e98bbbe

File tree

5 files changed

+20
-9
lines changed

5 files changed

+20
-9
lines changed

ChangeLog.d/bugfix_3782.txt

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Bugfix
2+
* Fix build failures on GCC 11. Fixes #3782.

library/cmac.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ int mbedtls_cipher_cmac( const mbedtls_cipher_info_t *cipher_info,
450450
*/
451451
int mbedtls_aes_cmac_prf_128( const unsigned char *key, size_t key_length,
452452
const unsigned char *input, size_t in_len,
453-
unsigned char *output )
453+
unsigned char output[16] )
454454
{
455455
int ret;
456456
const mbedtls_cipher_info_t *cipher_info;

library/ssl_tls.c

+15-6
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,7 @@ static void ssl_calc_finished_tls( mbedtls_ssl_context *, unsigned char *, int )
621621
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
622622
#if defined(MBEDTLS_SHA256_C)
623623
static void ssl_update_checksum_sha256( mbedtls_ssl_context *, const unsigned char *, size_t );
624-
static void ssl_calc_verify_tls_sha256( mbedtls_ssl_context *,unsigned char * );
624+
static void ssl_calc_verify_tls_sha256( mbedtls_ssl_context *, unsigned char * );
625625
static void ssl_calc_finished_tls_sha256( mbedtls_ssl_context *,unsigned char *, int );
626626
#endif
627627

@@ -1142,7 +1142,7 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl )
11421142
}
11431143

11441144
#if defined(MBEDTLS_SSL_PROTO_SSL3)
1145-
void ssl_calc_verify_ssl( mbedtls_ssl_context *ssl, unsigned char hash[36] )
1145+
void ssl_calc_verify_ssl( mbedtls_ssl_context *ssl, unsigned char *hash )
11461146
{
11471147
mbedtls_md5_context md5;
11481148
mbedtls_sha1_context sha1;
@@ -1191,7 +1191,7 @@ void ssl_calc_verify_ssl( mbedtls_ssl_context *ssl, unsigned char hash[36] )
11911191
#endif /* MBEDTLS_SSL_PROTO_SSL3 */
11921192

11931193
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
1194-
void ssl_calc_verify_tls( mbedtls_ssl_context *ssl, unsigned char hash[36] )
1194+
void ssl_calc_verify_tls( mbedtls_ssl_context *ssl, unsigned char *hash )
11951195
{
11961196
mbedtls_md5_context md5;
11971197
mbedtls_sha1_context sha1;
@@ -1219,7 +1219,7 @@ void ssl_calc_verify_tls( mbedtls_ssl_context *ssl, unsigned char hash[36] )
12191219

12201220
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
12211221
#if defined(MBEDTLS_SHA256_C)
1222-
void ssl_calc_verify_tls_sha256( mbedtls_ssl_context *ssl, unsigned char hash[32] )
1222+
void ssl_calc_verify_tls_sha256( mbedtls_ssl_context *ssl, unsigned char *hash )
12231223
{
12241224
mbedtls_sha256_context sha256;
12251225

@@ -1240,7 +1240,7 @@ void ssl_calc_verify_tls_sha256( mbedtls_ssl_context *ssl, unsigned char hash[32
12401240
#endif /* MBEDTLS_SHA256_C */
12411241

12421242
#if defined(MBEDTLS_SHA512_C)
1243-
void ssl_calc_verify_tls_sha384( mbedtls_ssl_context *ssl, unsigned char hash[48] )
1243+
void ssl_calc_verify_tls_sha384( mbedtls_ssl_context *ssl, unsigned char *hash )
12441244
{
12451245
mbedtls_sha512_context sha512;
12461246

@@ -6363,13 +6363,22 @@ static void ssl_calc_finished_tls_sha256(
63636363
#endif /* MBEDTLS_SHA256_C */
63646364

63656365
#if defined(MBEDTLS_SHA512_C)
6366+
6367+
typedef int (*finish_sha384_t)(mbedtls_sha512_context*, unsigned char*);
6368+
63666369
static void ssl_calc_finished_tls_sha384(
63676370
mbedtls_ssl_context *ssl, unsigned char *buf, int from )
63686371
{
63696372
int len = 12;
63706373
const char *sender;
63716374
mbedtls_sha512_context sha512;
63726375
unsigned char padbuf[48];
6376+
/*
6377+
* For SHA-384, we can save 16 bytes by keeping padbuf 48 bytes long.
6378+
* However, to avoid stringop-overflow warning in gcc, we have to cast
6379+
* mbedtls_sha512_finish_ret().
6380+
*/
6381+
finish_sha384_t finish_sha384 = (finish_sha384_t)mbedtls_sha512_finish_ret;
63736382

63746383
mbedtls_ssl_session *session = ssl->session_negotiate;
63756384
if( !session )
@@ -6396,7 +6405,7 @@ static void ssl_calc_finished_tls_sha384(
63966405
? "client finished"
63976406
: "server finished";
63986407

6399-
mbedtls_sha512_finish_ret( &sha512, padbuf );
6408+
finish_sha384( &sha512, padbuf );
64006409

64016410
ssl->handshake->tls_prf( session->master, 48, sender,
64026411
padbuf, 48, buf, len );

programs/test/selftest.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ static int calloc_self_test( int verbose )
185185
}
186186
#endif /* MBEDTLS_SELF_TEST */
187187

188-
static int test_snprintf( size_t n, const char ref_buf[10], int ref_ret )
188+
static int test_snprintf( size_t n, const char *ref_buf, int ref_ret )
189189
{
190190
int ret;
191191
char buf[10] = "xxxxxxxxx";

tests/suites/host_test.function

+1-1
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ static int convert_params( size_t cnt , char ** params , int * int_params_store
330330
#if defined(__GNUC__)
331331
__attribute__((__noinline__))
332332
#endif
333-
static int test_snprintf( size_t n, const char ref_buf[10], int ref_ret )
333+
static int test_snprintf( size_t n, const char *ref_buf, int ref_ret )
334334
{
335335
int ret;
336336
char buf[10] = "xxxxxxxxx";

0 commit comments

Comments
 (0)