mirror of
https://github.com/espressif/esp-idf.git
synced 2026-04-27 11:03:11 +00:00
Merge branch 'fix/esp-tee-validation-clobber-and-deref-before-check' into 'master'
fix(esp_tee): prevent validation clobbering and deref-before-check in secure services See merge request espressif/esp-idf!47589
This commit is contained in:
@@ -392,8 +392,12 @@ esp_err_t _ss_esp_ds_sign(const void *message,
|
||||
void *signature)
|
||||
{
|
||||
bool valid_addr = esp_tee_buf_in_ree(data, sizeof(esp_ds_data_t));
|
||||
if (!valid_addr) {
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
size_t n = get_ds_msg_sign_len(data->rsa_length);
|
||||
valid_addr = (n > 0) && esp_tee_buf_in_ree(message, n) && esp_tee_buf_in_ree(signature, n);
|
||||
valid_addr &= (n > 0) && esp_tee_buf_in_ree(message, n) && esp_tee_buf_in_ree(signature, n);
|
||||
|
||||
#if CONFIG_SECURE_TEE_SEC_STG_MODE_RELEASE
|
||||
valid_addr &= (key_id != (hmac_key_id_t)CONFIG_SECURE_TEE_SEC_STG_EFUSE_HMAC_KEY_ID);
|
||||
@@ -415,8 +419,12 @@ esp_err_t _ss_esp_ds_start_sign(const void *message,
|
||||
{
|
||||
bool valid_addr = (esp_tee_buf_in_ree(esp_ds_ctx, sizeof(esp_ds_context_t *)) &&
|
||||
esp_tee_buf_in_ree(data, sizeof(esp_ds_data_t)));
|
||||
if (!valid_addr) {
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
size_t n = get_ds_msg_sign_len(data->rsa_length);
|
||||
valid_addr = (n > 0) && esp_tee_buf_in_ree(message, n);
|
||||
valid_addr &= (n > 0) && esp_tee_buf_in_ree(message, n);
|
||||
|
||||
#if CONFIG_SECURE_TEE_SEC_STG_MODE_RELEASE
|
||||
valid_addr &= (key_id != (hmac_key_id_t)CONFIG_SECURE_TEE_SEC_STG_EFUSE_HMAC_KEY_ID);
|
||||
|
||||
@@ -176,7 +176,7 @@ esp_err_t _ss_esp_tee_sec_storage_aead_encrypt(const esp_tee_sec_storage_aead_ct
|
||||
esp_tee_buf_in_ree(output, ctx->input_len));
|
||||
|
||||
if (ctx->aad_len != 0) {
|
||||
valid_addr = esp_tee_buf_in_ree(ctx->aad, ctx->aad_len);
|
||||
valid_addr &= esp_tee_buf_in_ree(ctx->aad, ctx->aad_len);
|
||||
}
|
||||
|
||||
if (!valid_addr) {
|
||||
@@ -196,7 +196,7 @@ esp_err_t _ss_esp_tee_sec_storage_aead_decrypt(const esp_tee_sec_storage_aead_ct
|
||||
esp_tee_buf_in_ree(output, ctx->input_len));
|
||||
|
||||
if (ctx->aad_len != 0) {
|
||||
valid_addr = esp_tee_buf_in_ree(ctx->aad, ctx->aad_len);
|
||||
valid_addr &= esp_tee_buf_in_ree(ctx->aad, ctx->aad_len);
|
||||
}
|
||||
|
||||
if (!valid_addr) {
|
||||
|
||||
Reference in New Issue
Block a user