Merge cherrypicks of [16300799] into tm-release.

Change-Id: I1b9e424db188e1c277e0985cdb558710a60a4965
This commit is contained in:
Android Build Coastguard Worker
2021-11-19 03:04:57 +00:00

View File

@@ -756,6 +756,8 @@ class Adapter {
} }
} }
bool level1_valid() { return level1_valid_; }
void SetSandbox(const uint8_t* sandbox_id, size_t sandbox_id_length) { void SetSandbox(const uint8_t* sandbox_id, size_t sandbox_id_length) {
sandbox_id_.assign(sandbox_id, sandbox_id + sandbox_id_length); sandbox_id_.assign(sandbox_id, sandbox_id + sandbox_id_length);
} }
@@ -817,6 +819,12 @@ class Adapter {
level1_.BuildInformation()); level1_.BuildInformation());
} }
} else { } else {
FallBackToLevel3();
}
return result;
}
void FallBackToLevel3() {
level1_ = FunctionPointers(); // revert to all null pointers. level1_ = FunctionPointers(); // revert to all null pointers.
level1_valid_ = false; level1_valid_ = false;
// Note: if the function pointers are bad, we do not close the library and // Note: if the function pointers are bad, we do not close the library and
@@ -825,8 +833,6 @@ class Adapter {
// weighed the possibility that the library would be fixed on the next // weighed the possibility that the library would be fixed on the next
// load. // load.
} }
return result;
}
bool LoadLevel1(wvcdm::metrics::OemCryptoDynamicAdapterMetrics* metrics) { bool LoadLevel1(wvcdm::metrics::OemCryptoDynamicAdapterMetrics* metrics) {
if (metrics == nullptr) { if (metrics == nullptr) {
@@ -1282,6 +1288,7 @@ namespace wvcdm {
OEMCryptoResult OEMCrypto_InitializeAndCheckKeybox( OEMCryptoResult OEMCrypto_InitializeAndCheckKeybox(
bool* needs_keybox_provisioning) { bool* needs_keybox_provisioning) {
if (!needs_keybox_provisioning) return OEMCrypto_ERROR_UNKNOWN_FAILURE; if (!needs_keybox_provisioning) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
*needs_keybox_provisioning = false;
if (!gAdapter) { if (!gAdapter) {
gAdapter.reset(new Adapter()); gAdapter.reset(new Adapter());
} }
@@ -1295,7 +1302,8 @@ OEMCryptoResult OEMCrypto_InitializeAndCheckKeybox(
if (ignore_count > 0) { if (ignore_count > 0) {
LOGD("Ignoring keybox status %d", static_cast<int>(keybox_status)); LOGD("Ignoring keybox status %d", static_cast<int>(keybox_status));
} }
*needs_keybox_provisioning = true; LOGD("L1 has no keybox. Falling back to L3.");
gAdapter->FallBackToLevel3();
return OEMCrypto_SUCCESS; return OEMCrypto_SUCCESS;
} }
return keybox_status; return keybox_status;