@@ -328,8 +328,16 @@ non-orderly shutdown adds a one-try penalty; on clockless builds neither applies
328328power-off cannot accumulate into lockout. A failed ` lockoutAuth ` locks the
329329lockout hierarchy: that lock persists across reboot and clears after
330330` lockoutRecovery ` seconds, except when ` lockoutRecovery ` is 0 (reboot-only
331- recovery). ` Startup ` /` Shutdown ` are never DA-gated, so a reboot in lockout can
332- always recover. Entities marked ` noDA ` (` TPMA_OBJECT_noDA ` on objects,
331+ recovery). Because the clock HAL reports milliseconds * since boot* , this timer
332+ measures continuous post-boot uptime, not wall-clock time across reboots — a
333+ device that reboots more often than ` lockoutRecovery ` extends its effective
334+ recovery window. The lock only blocks commands authorized via ` lockoutAuth `
335+ (` DictionaryAttackLockReset ` , ` DictionaryAttackParameters ` , lockout-authorized
336+ ` Clear ` ); the platform hierarchy is always an escape hatch —
337+ ` TPM2_ClearControl(platformAuth, clearDisable=NO) ` then ` TPM2_Clear(platformAuth) `
338+ recovers even when ` disableClear ` was set. ` Startup ` /` Shutdown ` are never
339+ DA-gated, so a reboot in lockout can always recover. Entities marked ` noDA `
340+ (` TPMA_OBJECT_noDA ` on objects,
333341` TPMA_NV_NO_DA ` on NV indices) never feed the counter and stay usable during
334342lockout. ` TPM2_GetCapability(TPM_CAP_TPM_PROPERTIES) ` reports
335343` TPM_PT_MAX_AUTH_FAIL ` , ` TPM_PT_LOCKOUT_INTERVAL ` , ` TPM_PT_LOCKOUT_RECOVERY ` ,
0 commit comments