From cddd964c57d2e55b1ae5d570e3cd063481a93f5b Mon Sep 17 00:00:00 2001 From: Evan Reichard Date: Mon, 20 Jul 2026 07:25:59 -0400 Subject: [PATCH] Guard esp32c3 cache XTS-AES use when gcrypt absent --- hw/misc/esp32c3_cache.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/hw/misc/esp32c3_cache.c b/hw/misc/esp32c3_cache.c index 1879b5c2df..e3f09cc51b 100644 --- a/hw/misc/esp32c3_cache.c +++ b/hw/misc/esp32c3_cache.c @@ -58,7 +58,6 @@ static inline uint32_t esp32c3_read_mmu_value(ESP32C3CacheState *s, hwaddr reg_a static inline void esp32c3_write_mmu_value(ESP32C3CacheState *s, hwaddr reg_addr, uint32_t value) { - ESP32C3XtsAesClass *xts_aes_class = ESP32C3_XTS_AES_GET_CLASS(s->xts_aes); /* Make the assumption that the address is aligned on sizeof(uint32_t) */ const uint32_t index = reg_addr / sizeof(uint32_t); /* Reserved bits shall always be 0 */ @@ -82,8 +81,12 @@ static inline void esp32c3_write_mmu_value(ESP32C3CacheState *s, hwaddr reg_addr if (s->flash_blk != NULL) { blk_pread(s->flash_blk, physical_address, ESP32C3_PAGE_SIZE, cache_data, 0); } - if (xts_aes_class->is_flash_enc_enabled(s->xts_aes)) { - xts_aes_class->decrypt(s->xts_aes, physical_address, cache_data, ESP32C3_PAGE_SIZE); + // XTS-AES Flash Decryption - Only wired when built with CONFIG_GCRYPT; absent here means flash is treated as unencrypted, matching hardware with flash encryption disabled. Encrypted-flash firmware needs the gcrypt build. + if (s->xts_aes != NULL) { + ESP32C3XtsAesClass *xts_aes_class = ESP32C3_XTS_AES_GET_CLASS(s->xts_aes); + if (xts_aes_class->is_flash_enc_enabled(s->xts_aes)) { + xts_aes_class->decrypt(s->xts_aes, physical_address, cache_data, ESP32C3_PAGE_SIZE); + } } } s->mmu[index].val = e.val; @@ -225,12 +228,6 @@ static void esp32c3_cache_realize(DeviceState *dev, Error **errp) /* Initialize the registers */ esp32c3_cache_reset_hold(OBJECT(dev), RESET_TYPE_COLD); - ESP32C3CacheState *s = ESP32C3_CACHE(dev); - - /* Make sure XTS_AES was set or issue an error */ - if (s->xts_aes == NULL) { - error_report("[CACHE] XTS_AES controller must be set!"); - } } static void esp32c3_cache_init(Object *obj)