Skip to content

Commit 3ea8e10

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 3ea8e10

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

sw/device/lib/testing/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ cc_library(
242242
"//sw/device/lib/dif:rstmgr",
243243
"//sw/device/lib/runtime:ibex",
244244
"//sw/device/lib/testing/test_framework:check",
245+
"//sw/device/lib/testing/test_framework:ottf_alerts",
245246
"//sw/device/silicon_creator/lib/base:chip",
246247
"//sw/device/silicon_creator/lib/drivers:retention_sram",
247248
],

sw/device/lib/testing/keymgr_testutils.c

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "sw/device/lib/testing/otp_ctrl_testutils.h"
1919
#include "sw/device/lib/testing/rstmgr_testutils.h"
2020
#include "sw/device/lib/testing/test_framework/check.h"
21+
#include "sw/device/lib/testing/test_framework/ottf_alerts.h"
2122
#include "sw/device/silicon_creator/lib/base/chip.h"
2223
#include "sw/device/silicon_creator/lib/drivers/retention_sram.h"
2324

@@ -78,8 +79,10 @@ status_t keymgr_testutils_flash_init(
7879
const keymgr_testutils_secret_t *creator_secret,
7980
const keymgr_testutils_secret_t *owner_secret) {
8081
// Initialize flash secrets.
81-
write_info_page(flash, kFlashInfoPageIdCreatorSecret, creator_secret,
82-
/*scramble=*/true);
82+
if (creator_secret) {
83+
write_info_page(flash, kFlashInfoPageIdCreatorSecret, creator_secret,
84+
/*scramble=*/true);
85+
}
8386
write_info_page(flash, kFlashInfoPageIdOwnerSecret, owner_secret,
8487
/*scramble=*/true);
8588
return OK_STATUS();
@@ -189,6 +192,7 @@ status_t keymgr_testutils_try_startup(dif_keymgr_t *keymgr, dif_kmac_t *kmac,
189192
status_t keymgr_testutils_init_nvm_then_reset(void) {
190193
dif_flash_ctrl_state_t flash;
191194
dif_rstmgr_t rstmgr;
195+
dif_otp_ctrl_t otp_ctrl;
192196

193197
TRY(dif_rstmgr_init(mmio_region_from_addr(TOP_EARLGREY_RSTMGR_AON_BASE_ADDR),
194198
&rstmgr));
@@ -201,8 +205,22 @@ status_t keymgr_testutils_init_nvm_then_reset(void) {
201205

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

207225
TRY(check_lock_otp_partition());
208226

0 commit comments

Comments
 (0)