Skip to content

Instantly share code, notes, and snippets.

@supreetd21
Created November 9, 2020 00:08
Show Gist options
  • Save supreetd21/6e66be7e30fbd26e66b8e9f930509208 to your computer and use it in GitHub Desktop.
Save supreetd21/6e66be7e30fbd26e66b8e9f930509208 to your computer and use it in GitHub Desktop.
0001-Secure-Boot-V2-Fix-an-issue-leading-to-manual-enable.patch
From 417db469c3028d1eaec73744b5baa8aff3436af8 Mon Sep 17 00:00:00 2001
From: Supreet Deshpande <[email protected]>
Date: Mon, 9 Nov 2020 04:58:19 +0530
Subject: [PATCH] Secure Boot V2: Fix an issue leading to manual enablement of
Secure Boot v2.
Fixes https://github.com/espressif/esp-idf/issues/6050
---
.../src/esp32/secure_boot.c | 46 ++++++++++++++-----
1 file changed, 34 insertions(+), 12 deletions(-)
diff --git a/components/bootloader_support/src/esp32/secure_boot.c b/components/bootloader_support/src/esp32/secure_boot.c
index c3a5a532a8..520fde240d 100644
--- a/components/bootloader_support/src/esp32/secure_boot.c
+++ b/components/bootloader_support/src/esp32/secure_boot.c
@@ -319,16 +319,26 @@ esp_err_t esp_secure_boot_v2_permanently_enable(const esp_image_metadata_t *imag
uint32_t dis_reg = REG_READ(EFUSE_BLK0_RDATA0_REG);
bool efuse_key_read_protected = dis_reg & EFUSE_RD_DIS_BLK2;
bool efuse_key_write_protected = dis_reg & EFUSE_WR_DIS_BLK2;
+ uint32_t efuse_blk2_r0, efuse_blk2_r1, efuse_blk2_r2, efuse_blk2_r3, efuse_blk2_r4, efuse_blk2_r5, efuse_blk2_r6, efuse_blk2_r7;
+ efuse_blk2_r0 = REG_READ(EFUSE_BLK2_RDATA0_REG);
+ efuse_blk2_r1 = REG_READ(EFUSE_BLK2_RDATA1_REG);
+ efuse_blk2_r2 = REG_READ(EFUSE_BLK2_RDATA2_REG);
+ efuse_blk2_r3 = REG_READ(EFUSE_BLK2_RDATA3_REG);
+ efuse_blk2_r4 = REG_READ(EFUSE_BLK2_RDATA4_REG);
+ efuse_blk2_r5 = REG_READ(EFUSE_BLK2_RDATA5_REG);
+ efuse_blk2_r6 = REG_READ(EFUSE_BLK2_RDATA6_REG);
+ efuse_blk2_r7 = REG_READ(EFUSE_BLK2_RDATA7_REG);
+
+ if (efuse_key_read_protected == true) {
+ ESP_LOGE(TAG, "Secure Boot v2 digest(BLK2) read protected, aborting....");
+ return ESP_FAIL;
+ }
+
if (efuse_key_write_protected == false
- && efuse_key_read_protected == false
- && REG_READ(EFUSE_BLK2_RDATA0_REG) == 0
- && REG_READ(EFUSE_BLK2_RDATA1_REG) == 0
- && REG_READ(EFUSE_BLK2_RDATA2_REG) == 0
- && REG_READ(EFUSE_BLK2_RDATA3_REG) == 0
- && REG_READ(EFUSE_BLK2_RDATA4_REG) == 0
- && REG_READ(EFUSE_BLK2_RDATA5_REG) == 0
- && REG_READ(EFUSE_BLK2_RDATA6_REG) == 0
- && REG_READ(EFUSE_BLK2_RDATA7_REG) == 0) {
+ && efuse_blk2_r0 == 0 && efuse_blk2_r1 == 0
+ && efuse_blk2_r2 == 0 && efuse_blk2_r3 == 0
+ && efuse_blk2_r4 == 0 && efuse_blk2_r5 == 0
+ && efuse_blk2_r6 == 0 && efuse_blk2_r7 == 0) {
/* Verifies the signature block appended to the image matches with the signature block of the app to be loaded */
ret = secure_boot_v2_digest_generate(bootloader_data.start_addr, bootloader_data.image_len - SIG_BLOCK_PADDING, boot_pub_key_digest);
if (ret != ESP_OK) {
@@ -343,12 +353,24 @@ esp_err_t esp_secure_boot_v2_permanently_enable(const esp_image_metadata_t *imag
ESP_LOGD(TAG, "EFUSE_BLKx_WDATA%d_REG = 0x%08x", i, boot_public_key_digest_ptr[i]);
}
+ } else {
+ uint32_t efuse_blk2_digest[8];
+ efuse_blk2_digest[0] = efuse_blk2_r0;
+ efuse_blk2_digest[1] = efuse_blk2_r1;
+ efuse_blk2_digest[2] = efuse_blk2_r2;
+ efuse_blk2_digest[3] = efuse_blk2_r3;
+ efuse_blk2_digest[4] = efuse_blk2_r4;
+ efuse_blk2_digest[5] = efuse_blk2_r5;
+ efuse_blk2_digest[6] = efuse_blk2_r6;
+ efuse_blk2_digest[7] = efuse_blk2_r7;
+ memcpy(boot_pub_key_digest, efuse_blk2_digest, DIGEST_LEN);
+ ESP_LOGW(TAG, "Using pre-loaded secure boot v2 public key digest in EFUSE block 2");
+ }
+
+ if (efuse_key_write_protected == false) {
ESP_LOGI(TAG, "Write protecting public key digest...");
new_wdata0 |= EFUSE_WR_DIS_BLK2;
efuse_key_write_protected = true;
- efuse_key_read_protected = false;
- } else {
- ESP_LOGW(TAG, "Using pre-loaded secure boot v2 public key digest in EFUSE block 2");
}
uint8_t app_pub_key_digest[DIGEST_LEN];
--
2.20.1 (Apple Git-117)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment