Disable delayed termination on unprovisioning

[ Merge of http://go/wvgerrit/95784 ]

On unprovisioning, all persistent state/files are deleted. If a
provisioning session is opened soon after, |OEMCrypto_Terminate|
and |OEMCrypto_Initialize| will not be called. The (deleted) device
key will remain resident in memory and will not be regenerated until
|OEMCrypto_Initialize| is called. Any L3 licenses created will be
associated with a device key that does not exist, at least after
OEMCrypto is terminated.

By disabling delayed termination of OEMCrypto, OEMCrypto will be
terminated and initialized immediately on unprovisioning.

Bug: 149808504
Test: WV unit/integration tests on L3
Change-Id: Id3fbce621b47a723ff624cf45f1ac203421a8dba
This commit is contained in:
Rahul Frias
2020-03-12 15:58:33 -07:00
parent f14dea8b89
commit 89d19be766

View File

@@ -227,6 +227,12 @@ CdmResponseType WvContentDecryptionModule::HandleProvisioningResponse(
CdmResponseType WvContentDecryptionModule::Unprovision(
CdmSecurityLevel level, const CdmIdentifier& identifier) {
CdmEngine* cdm_engine = EnsureCdmForIdentifier(identifier);
// Persistent state is deleted on unprovisioning. The L3 OEMCrypto device
// key may however remain in memory until |OEMCrypto_Terminate| is called.
// It is not regenerated until |OEMCrypto_Initialize| is called.
// Enable immediate OEMCrypto termination and re-initalization on
// unprovisioning.
CryptoSession::DisableDelayedTermination();
return cdm_engine->Unprovision(level);
}