Skip to content

Commit 1f4f61e

Browse files
committed
[nrf noup] bootutil: Locking KMU keys
Lock KMU keys before passing execution to application. Signed-off-by: Dominik Ermel <[email protected]>
1 parent 78ad12e commit 1f4f61e

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

boot/bootutil/src/ed25519_psa.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,4 +165,34 @@ int exec_revoke(void)
165165
return ret;
166166
}
167167
#endif /* CONFIG_BOOT_KMU_KEYS_REVOCATION */
168+
169+
void nrf_crypto_keys_housekeeping(void)
170+
{
171+
psa_status_t status = psa_crypto_init();
172+
173+
if (status != PSA_SUCCESS) {
174+
BOOT_LOG_ERR("PSA crypto init failed with error %d", status);
175+
return;
176+
}
177+
178+
status = PSA_ERROR_NOT_SUPPORTED;
179+
180+
/* We will continue through all keys, even if we have error while
181+
* processing any of it. Only doing BOOT_LOG_DBG, as we do not
182+
* really want to inform on failures to lock.
183+
*/
184+
for (int i = 0; i < CONFIG_BOOT_SIGNATURE_KMU_SLOTS; ++i) {
185+
psa_key_attributes_t attr;
186+
187+
status = psa_get_key_attributes(kmu_key_ids[i], &attr);
188+
BOOT_LOG_DBG("KMU key 0x%x(%d) attr query status == %d",
189+
kmu_key_ids[i], i, status);
190+
191+
if (status == PSA_SUCCESS) {
192+
status = cracen_kmu_block(&attr);
193+
BOOT_LOG_DBG("KMU key lock status == %d", status);
194+
}
195+
}
196+
}
197+
168198
#endif

boot/zephyr/include/nrf_cleanup.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,15 @@ void nrf_cleanup_peripheral(void);
2121
*/
2222
void nrf_cleanup_ns_ram(void);
2323

24+
/**
25+
* Crypto key storage housekeeping. Intended to cleanup key objects from
26+
* crypto backend and apply key policies that should take effect after
27+
* MCUboot no longer needs access to keys.
28+
*/
29+
#if defined(CONFIG_BOOT_SIGNATURE_USING_KMU)
30+
extern void nrf_crypto_keys_housekeeping(void);
31+
#else
32+
#define nrf_crypto_keys_housekeeping() do {} while (0)
33+
#endif
34+
2435
#endif

boot/zephyr/main.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,13 @@ int main(void)
648648

649649
mcuboot_status_change(MCUBOOT_STATUS_BOOTABLE_IMAGE_FOUND);
650650

651+
/* From this point MCUboot does not need access to crypto keys.
652+
* Cleanup backend key objects and apply key access policies that
653+
* will take effect from now through entire boot session and application
654+
* run.
655+
*/
656+
nrf_crypto_keys_housekeeping();
657+
651658
#if USE_PARTITION_MANAGER && CONFIG_FPROTECT
652659

653660
#ifdef PM_S1_ADDRESS

0 commit comments

Comments
 (0)