Skip to content

Commit 3057787

Browse files
committed
[test] Prevent creator secret being re-written
`keymgr` testutils tries to write the creator secret to flash even if it's locked, triggering a recoverable flash_ctrl alert which is ignored. Signed-off-by: James Wainwright <[email protected]> (cherry picked from commit cbaf5e3)
1 parent 347aa22 commit 3057787

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

sw/device/lib/testing/keymgr_testutils.c

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,10 @@ status_t keymgr_testutils_flash_init(
7878
const keymgr_testutils_secret_t *creator_secret,
7979
const keymgr_testutils_secret_t *owner_secret) {
8080
// Initialize flash secrets.
81-
write_info_page(flash, kFlashInfoPageIdCreatorSecret, creator_secret,
82-
/*scramble=*/true);
81+
if (creator_secret) {
82+
write_info_page(flash, kFlashInfoPageIdCreatorSecret, creator_secret,
83+
/*scramble=*/true);
84+
}
8385
write_info_page(flash, kFlashInfoPageIdOwnerSecret, owner_secret,
8486
/*scramble=*/true);
8587
return OK_STATUS();
@@ -189,6 +191,7 @@ status_t keymgr_testutils_try_startup(dif_keymgr_t *keymgr, dif_kmac_t *kmac,
189191
status_t keymgr_testutils_init_nvm_then_reset(void) {
190192
dif_flash_ctrl_state_t flash;
191193
dif_rstmgr_t rstmgr;
194+
dif_otp_ctrl_t otp_ctrl;
192195

193196
TRY(dif_rstmgr_init(mmio_region_from_addr(TOP_EARLGREY_RSTMGR_AON_BASE_ADDR),
194197
&rstmgr));
@@ -201,8 +204,22 @@ status_t keymgr_testutils_init_nvm_then_reset(void) {
201204

202205
TRY(dif_flash_ctrl_init_state(
203206
&flash, mmio_region_from_addr(TOP_EARLGREY_FLASH_CTRL_CORE_BASE_ADDR)));
204-
205-
TRY(keymgr_testutils_flash_init(&flash, &kCreatorSecret, &kOwnerSecret));
207+
TRY(dif_otp_ctrl_init(
208+
mmio_region_from_addr(TOP_EARLGREY_OTP_CTRL_CORE_BASE_ADDR),
209+
&otp_ctrl));
210+
211+
bool secret2_computed = false;
212+
TRY(dif_otp_ctrl_is_digest_computed(&otp_ctrl, kDifOtpCtrlPartitionSecret2,
213+
&secret2_computed));
214+
215+
// Only initialise the creator secret if `SECRET2` digest has not been
216+
// computed. `flash_ctrl` will throw a recoverable error if we try to write
217+
// this afterwards.
218+
const keymgr_testutils_secret_t *creator_secret = NULL;
219+
if (!secret2_computed) {
220+
creator_secret = &kCreatorSecret;
221+
}
222+
TRY(keymgr_testutils_flash_init(&flash, creator_secret, &kOwnerSecret));
206223

207224
TRY(check_lock_otp_partition());
208225

0 commit comments

Comments
 (0)