secure_boot_secure_features.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /*
  2. * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include <strings.h>
  7. #include "esp_flash_encrypt.h"
  8. #include "esp_secure_boot.h"
  9. #include "esp_efuse.h"
  10. #include "esp_efuse_table.h"
  11. #include "esp_log.h"
  12. #include "sdkconfig.h"
  13. static __attribute__((unused)) const char *TAG = "secure_boot";
  14. esp_err_t esp_secure_boot_enable_secure_features(void)
  15. {
  16. #ifdef CONFIG_SECURE_BOOT_V1_ENABLED
  17. ESP_LOGI(TAG, "Read & write protecting new key...");
  18. esp_efuse_write_field_bit(ESP_EFUSE_RD_DIS_BLK2);
  19. esp_efuse_write_field_bit(ESP_EFUSE_WR_DIS_BLK2);
  20. esp_efuse_write_field_bit(ESP_EFUSE_ABS_DONE_0);
  21. #ifndef CONFIG_SECURE_BOOT_ALLOW_JTAG
  22. ESP_LOGI(TAG, "Disable JTAG...");
  23. esp_efuse_write_field_bit(ESP_EFUSE_DISABLE_JTAG);
  24. #else
  25. ESP_LOGW(TAG, "Not disabling JTAG - SECURITY COMPROMISED");
  26. #endif
  27. #ifndef CONFIG_SECURE_BOOT_ALLOW_ROM_BASIC
  28. ESP_LOGI(TAG, "Disable ROM BASIC interpreter fallback...");
  29. esp_efuse_write_field_bit(ESP_EFUSE_CONSOLE_DEBUG_DISABLE);
  30. #else
  31. ESP_LOGW(TAG, "Not disabling ROM BASIC fallback - SECURITY COMPROMISED");
  32. #endif
  33. #endif // CONFIG_SECURE_BOOT_V1_ENABLED
  34. #ifdef CONFIG_SECURE_BOOT_V2_ENABLED
  35. esp_err_t err;
  36. err = esp_efuse_write_field_bit(ESP_EFUSE_ABS_DONE_1);
  37. if (err != ESP_OK) {
  38. ESP_LOGE(TAG, "Blowing secure boot efuse...failed.");
  39. return err;
  40. }
  41. #ifndef CONFIG_SECURE_BOOT_ALLOW_JTAG
  42. ESP_LOGI(TAG, "Disable JTAG...");
  43. err = esp_efuse_write_field_bit(ESP_EFUSE_DISABLE_JTAG);
  44. if (err != ESP_OK) {
  45. ESP_LOGE(TAG, "Disable JTAG...failed.");
  46. return err;
  47. }
  48. #else
  49. ESP_LOGW(TAG, "Not disabling JTAG - SECURITY COMPROMISED");
  50. #endif
  51. #ifndef CONFIG_SECURE_BOOT_ALLOW_ROM_BASIC
  52. ESP_LOGI(TAG, "Disable ROM BASIC interpreter fallback...");
  53. err = esp_efuse_write_field_bit(ESP_EFUSE_CONSOLE_DEBUG_DISABLE);
  54. if (err != ESP_OK) {
  55. ESP_LOGE(TAG, "Disable ROM BASIC interpreter fallback...failed.");
  56. return err;
  57. }
  58. #else
  59. ESP_LOGW(TAG, "Not disabling ROM BASIC fallback - SECURITY COMPROMISED");
  60. #endif
  61. #ifdef CONFIG_SECURE_DISABLE_ROM_DL_MODE
  62. ESP_LOGI(TAG, "Disable ROM Download mode...");
  63. err = esp_efuse_disable_rom_download_mode();
  64. if (err != ESP_OK) {
  65. ESP_LOGE(TAG, "Could not disable ROM Download mode...");
  66. return err;
  67. }
  68. #else
  69. ESP_LOGW(TAG, "Not disabling ROM Download mode - SECURITY COMPROMISED");
  70. #endif
  71. #ifndef CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS
  72. bool rd_dis_now = true;
  73. #ifdef CONFIG_SECURE_FLASH_ENC_ENABLED
  74. /* If flash encryption is not enabled yet then don't read-disable efuses yet, do it later in the boot
  75. when Flash Encryption is being enabled */
  76. rd_dis_now = esp_flash_encryption_enabled();
  77. #endif
  78. if (rd_dis_now) {
  79. ESP_LOGI(TAG, "Prevent read disabling of additional efuses...");
  80. err = esp_efuse_write_field_bit(ESP_EFUSE_WR_DIS_EFUSE_RD_DISABLE);
  81. if (err != ESP_OK) {
  82. ESP_LOGE(TAG, "Prevent read disabling of additional efuses...failed.");
  83. return err;
  84. }
  85. }
  86. #else
  87. ESP_LOGW(TAG, "Allowing read disabling of additional efuses - SECURITY COMPROMISED");
  88. #endif
  89. #endif // CONFIG_SECURE_BOOT_V2_ENABLED
  90. return ESP_OK;
  91. }