| Previous | Next |
| TPM_20_E_NV_SPACE | TPM_20_E_BAD_CONTEXT |
TPM_20_E_NV_DEFINED
TPM_20_E_NV_DEFINED reports a collision with an existing TPM definition. For NV provisioning, the selected NV index handle already exists. The same status family can also matter when a persistent-object handle is already occupied, so a deployment must determine which TPM namespace and command caused the error.
Why blind retry is unsafe
- Reusing a known handle does not prove that the stored public area, Name, attributes, or policy belong to the current application version.
- Another tenant, installer, firmware component, or an earlier version of the same product may legitimately own the existing definition.
- Deleting the old definition to make the command succeed can erase an authorization policy, a monotonic counter, or an object required for recovery.
Verification sequence
- For an NV index, retrieve the public area and compare its index handle, data size, attributes, policy digest, and Name with the expected provisioning manifest.
- For a persistent object, read its public area and confirm that its Name and public template are expected before treating the error as an idempotent success.
- Keep NV index and persistent-object ownership records separate even when a product uses adjacent numeric handles.
Correct recovery
Either adopt a matching existing definition through an explicit idempotent-provisioning rule, choose an approved vacant handle, or perform an authorized migration. The error itself is not evidence that deleting the existing handle is safe.
References: TCG TPM 2.0 Library Part 3: Commands, tpm2_nvreadpublic, and tpm2_readpublic.
Looking for a different code? Search another status or error code.
