ble_mesh: stack: Fix mbedtls aes ctx not deallocated

This commit is contained in:
lly
2021-02-04 11:13:51 +08:00
committed by bot
parent 02d3d358b5
commit c74c7fdb5a
2 changed files with 16 additions and 0 deletions

View File

@@ -1883,6 +1883,7 @@ int bt_mesh_encrypt_le(const uint8_t key[16], const uint8_t plaintext[16],
sys_memcpy_swap(tmp, key, 16); sys_memcpy_swap(tmp, key, 16);
if (mbedtls_aes_setkey_enc(&ctx, tmp, 128) != 0) { if (mbedtls_aes_setkey_enc(&ctx, tmp, 128) != 0) {
mbedtls_aes_free(&ctx);
return -EINVAL; return -EINVAL;
} }
@@ -1890,8 +1891,11 @@ int bt_mesh_encrypt_le(const uint8_t key[16], const uint8_t plaintext[16],
if (mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_ENCRYPT, if (mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_ENCRYPT,
tmp, enc_data) != 0) { tmp, enc_data) != 0) {
mbedtls_aes_free(&ctx);
return -EINVAL; return -EINVAL;
} }
mbedtls_aes_free(&ctx);
#else /* CONFIG_MBEDTLS_HARDWARE_AES */ #else /* CONFIG_MBEDTLS_HARDWARE_AES */
struct tc_aes_key_sched_struct s = {0}; struct tc_aes_key_sched_struct s = {0};
@@ -1926,13 +1930,17 @@ int bt_mesh_encrypt_be(const uint8_t key[16], const uint8_t plaintext[16],
mbedtls_aes_init(&ctx); mbedtls_aes_init(&ctx);
if (mbedtls_aes_setkey_enc(&ctx, key, 128) != 0) { if (mbedtls_aes_setkey_enc(&ctx, key, 128) != 0) {
mbedtls_aes_free(&ctx);
return -EINVAL; return -EINVAL;
} }
if (mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_ENCRYPT, if (mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_ENCRYPT,
plaintext, enc_data) != 0) { plaintext, enc_data) != 0) {
mbedtls_aes_free(&ctx);
return -EINVAL; return -EINVAL;
} }
mbedtls_aes_free(&ctx);
#else /* CONFIG_MBEDTLS_HARDWARE_AES */ #else /* CONFIG_MBEDTLS_HARDWARE_AES */
struct tc_aes_key_sched_struct s = {0}; struct tc_aes_key_sched_struct s = {0};

View File

@@ -1866,6 +1866,7 @@ int bt_mesh_encrypt_le(const uint8_t key[16], const uint8_t plaintext[16],
sys_memcpy_swap(tmp, key, 16); sys_memcpy_swap(tmp, key, 16);
if (mbedtls_aes_setkey_enc(&ctx, tmp, 128) != 0) { if (mbedtls_aes_setkey_enc(&ctx, tmp, 128) != 0) {
mbedtls_aes_free(&ctx);
return -EINVAL; return -EINVAL;
} }
@@ -1873,8 +1874,11 @@ int bt_mesh_encrypt_le(const uint8_t key[16], const uint8_t plaintext[16],
if (mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_ENCRYPT, if (mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_ENCRYPT,
tmp, enc_data) != 0) { tmp, enc_data) != 0) {
mbedtls_aes_free(&ctx);
return -EINVAL; return -EINVAL;
} }
mbedtls_aes_free(&ctx);
#else /* CONFIG_MBEDTLS_HARDWARE_AES */ #else /* CONFIG_MBEDTLS_HARDWARE_AES */
struct tc_aes_key_sched_struct s = {0}; struct tc_aes_key_sched_struct s = {0};
@@ -1909,13 +1913,17 @@ int bt_mesh_encrypt_be(const uint8_t key[16], const uint8_t plaintext[16],
mbedtls_aes_init(&ctx); mbedtls_aes_init(&ctx);
if (mbedtls_aes_setkey_enc(&ctx, key, 128) != 0) { if (mbedtls_aes_setkey_enc(&ctx, key, 128) != 0) {
mbedtls_aes_free(&ctx);
return -EINVAL; return -EINVAL;
} }
if (mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_ENCRYPT, if (mbedtls_aes_crypt_ecb(&ctx, MBEDTLS_AES_ENCRYPT,
plaintext, enc_data) != 0) { plaintext, enc_data) != 0) {
mbedtls_aes_free(&ctx);
return -EINVAL; return -EINVAL;
} }
mbedtls_aes_free(&ctx);
#else /* CONFIG_MBEDTLS_HARDWARE_AES */ #else /* CONFIG_MBEDTLS_HARDWARE_AES */
struct tc_aes_key_sched_struct s = {0}; struct tc_aes_key_sched_struct s = {0};