INSUFFICIENT_RESOURCE errors are mapped consistently. am: 6a247ab924
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11956161 Change-Id: I25a403be5994ceb29b15b6d6c53d8f02db2d3bd2
This commit is contained in:
@@ -253,7 +253,7 @@ enum CdmResponseType {
|
||||
INVALID_SESSION_1 = 199,
|
||||
NO_DEVICE_KEY_1 = 200,
|
||||
NO_CONTENT_KEY_2 = 201,
|
||||
INSUFFICIENT_CRYPTO_RESOURCES_2 = 202,
|
||||
/* previously INSUFFICIENT_CRYPTO_RESOURCES_2 = 202, */
|
||||
INVALID_PARAMETERS_ENG_13 = 203,
|
||||
INVALID_PARAMETERS_ENG_14 = 204,
|
||||
INVALID_PARAMETERS_ENG_15 = 205,
|
||||
@@ -272,7 +272,7 @@ enum CdmResponseType {
|
||||
LOAD_USAGE_HEADER_UNKNOWN_ERROR = 218,
|
||||
/* previously INVALID_PARAMETERS_ENG_17 = 219, */
|
||||
/* preivously INVALID_PARAMETERS_ENG_18 = 220, */
|
||||
INSUFFICIENT_CRYPTO_RESOURCES_3 = 221,
|
||||
/* previously INSUFFICIENT_CRYPTO_RESOURCES_3 = 221, */
|
||||
CREATE_USAGE_ENTRY_UNKNOWN_ERROR = 222,
|
||||
LOAD_USAGE_ENTRY_GENERATION_SKEW = 223,
|
||||
LOAD_USAGE_ENTRY_SIGNATURE_FAILURE = 224,
|
||||
@@ -331,12 +331,12 @@ enum CdmResponseType {
|
||||
/* previously LICENSE_REQUEST_INVALID_SUBLICENSE = 277, */
|
||||
CERT_PROVISIONING_EMPTY_SERVICE_CERTIFICATE = 278,
|
||||
LOAD_SYSTEM_ID_ERROR = 279,
|
||||
INSUFFICIENT_CRYPTO_RESOURCES_4 = 280,
|
||||
INSUFFICIENT_CRYPTO_RESOURCES_5 = 281,
|
||||
/* previously INSUFFICIENT_CRYPTO_RESOURCES_4 = 280, */
|
||||
/* previously INSUFFICIENT_CRYPTO_RESOURCES_5 = 281, */
|
||||
REMOVE_USAGE_INFO_ERROR_1 = 282,
|
||||
REMOVE_USAGE_INFO_ERROR_2 = 283,
|
||||
REMOVE_USAGE_INFO_ERROR_3 = 284,
|
||||
INSUFFICIENT_CRYPTO_RESOURCES_6 = 285,
|
||||
/* previously INSUFFICIENT_CRYPTO_RESOURCES_6 = 285, */
|
||||
NOT_AN_ENTITLEMENT_SESSION = 286,
|
||||
NO_MATCHING_ENTITLEMENT_KEY = 287,
|
||||
LOAD_ENTITLED_CONTENT_KEYS_ERROR = 288,
|
||||
|
||||
@@ -940,7 +940,7 @@ CdmResponseType CryptoSession::LoadKeys(
|
||||
update_usage_table_after_close_session_ = true;
|
||||
return KEY_ADDED;
|
||||
case OEMCrypto_ERROR_TOO_MANY_KEYS:
|
||||
return INSUFFICIENT_CRYPTO_RESOURCES_4;
|
||||
return INSUFFICIENT_CRYPTO_RESOURCES;
|
||||
case OEMCrypto_ERROR_USAGE_TABLE_UNRECOVERABLE:
|
||||
// Handle vendor specific error
|
||||
return NEED_PROVISIONING;
|
||||
@@ -980,7 +980,7 @@ CdmResponseType CryptoSession::LoadLicense(const std::string& signed_message,
|
||||
return LOAD_LICENSE_ERROR;
|
||||
case OEMCrypto_ERROR_TOO_MANY_KEYS:
|
||||
LOGE("Too many keys in license");
|
||||
return INSUFFICIENT_CRYPTO_RESOURCES_4;
|
||||
return INSUFFICIENT_CRYPTO_RESOURCES;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -1182,16 +1182,15 @@ CdmResponseType CryptoSession::PrepareAndSignProvisioningRequest(
|
||||
|
||||
CdmResponseType CryptoSession::LoadEntitledContentKeys(
|
||||
const std::vector<CryptoKey>& key_array) {
|
||||
OEMCryptoResult sts;
|
||||
WithOecSessionLock("LoadEntitledContentKeys", [&] {
|
||||
sts = key_session_->LoadEntitledContentKeys(key_array);
|
||||
});
|
||||
const OEMCryptoResult sts = WithOecSessionLock(
|
||||
"LoadEntitledContentKeys",
|
||||
[&] { return key_session_->LoadEntitledContentKeys(key_array); });
|
||||
|
||||
switch (sts) {
|
||||
case OEMCrypto_SUCCESS:
|
||||
return KEY_ADDED;
|
||||
case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES:
|
||||
return INSUFFICIENT_CRYPTO_RESOURCES_6;
|
||||
return INSUFFICIENT_CRYPTO_RESOURCES;
|
||||
case OEMCrypto_ERROR_INVALID_CONTEXT:
|
||||
return NOT_AN_ENTITLEMENT_SESSION;
|
||||
case OEMCrypto_KEY_NOT_ENTITLED:
|
||||
@@ -1240,39 +1239,46 @@ CdmResponseType CryptoSession::LoadCertificatePrivateKey(
|
||||
// Private.
|
||||
CdmResponseType CryptoSession::SelectKey(const std::string& key_id,
|
||||
CdmCipherMode cipher_mode) {
|
||||
OEMCryptoResult sts;
|
||||
WithOecSessionLock(
|
||||
"SelectKey", [&] { sts = key_session_->SelectKey(key_id, cipher_mode); });
|
||||
const OEMCryptoResult sts = WithOecSessionLock("SelectKey", [&] {
|
||||
return key_session_->SelectKey(key_id, cipher_mode);
|
||||
});
|
||||
|
||||
switch (sts) {
|
||||
// SelectKey errors.
|
||||
case OEMCrypto_SUCCESS:
|
||||
return NO_ERROR;
|
||||
case OEMCrypto_ERROR_KEY_EXPIRED:
|
||||
return NEED_KEY;
|
||||
case OEMCrypto_ERROR_INSUFFICIENT_HDCP:
|
||||
return INSUFFICIENT_OUTPUT_PROTECTION;
|
||||
case OEMCrypto_ERROR_ANALOG_OUTPUT:
|
||||
return ANALOG_OUTPUT_ERROR;
|
||||
case OEMCrypto_ERROR_INVALID_SESSION:
|
||||
return INVALID_SESSION_1;
|
||||
case OEMCrypto_ERROR_NO_DEVICE_KEY:
|
||||
return NO_DEVICE_KEY_1;
|
||||
case OEMCrypto_ERROR_NO_CONTENT_KEY:
|
||||
return NO_CONTENT_KEY_2;
|
||||
case OEMCrypto_KEY_NOT_LOADED: // obsolete.
|
||||
return NO_CONTENT_KEY_3;
|
||||
case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES:
|
||||
return INSUFFICIENT_CRYPTO_RESOURCES_2;
|
||||
case OEMCrypto_ERROR_UNKNOWN_FAILURE:
|
||||
return UNKNOWN_SELECT_KEY_ERROR_1;
|
||||
case OEMCrypto_ERROR_SESSION_LOST_STATE:
|
||||
return SESSION_LOST_STATE_ERROR;
|
||||
case OEMCrypto_ERROR_SYSTEM_INVALIDATED:
|
||||
return SYSTEM_INVALIDATED_ERROR;
|
||||
case OEMCrypto_ERROR_CONTROL_INVALID:
|
||||
case OEMCrypto_ERROR_KEYBOX_INVALID:
|
||||
default:
|
||||
return UNKNOWN_SELECT_KEY_ERROR_2;
|
||||
case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES:
|
||||
return INSUFFICIENT_CRYPTO_RESOURCES;
|
||||
case OEMCrypto_ERROR_UNKNOWN_FAILURE:
|
||||
return UNKNOWN_SELECT_KEY_ERROR_1;
|
||||
case OEMCrypto_ERROR_ANALOG_OUTPUT:
|
||||
return ANALOG_OUTPUT_ERROR;
|
||||
case OEMCrypto_ERROR_INSUFFICIENT_HDCP:
|
||||
return INSUFFICIENT_OUTPUT_PROTECTION;
|
||||
// LoadEntitledContentKeys errors.
|
||||
// |key_session_| may make calls to OEMCrypto_LoadEntitledContentKeys
|
||||
// if the key selected has not yet been loaded.
|
||||
case OEMCrypto_ERROR_INVALID_CONTEXT:
|
||||
return NOT_AN_ENTITLEMENT_SESSION;
|
||||
case OEMCrypto_KEY_NOT_ENTITLED:
|
||||
return NO_MATCHING_ENTITLEMENT_KEY;
|
||||
// Obsolete errors.
|
||||
case OEMCrypto_KEY_NOT_LOADED:
|
||||
return NO_CONTENT_KEY_3;
|
||||
// Catch all else.
|
||||
default:
|
||||
return MapOEMCryptoResult(sts, UNKNOWN_SELECT_KEY_ERROR_2, "SelectKey");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1527,7 +1533,7 @@ CdmResponseType CryptoSession::Decrypt(
|
||||
case OEMCrypto_WARNING_MIXED_OUTPUT_PROTECTION:
|
||||
return NO_ERROR;
|
||||
case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES:
|
||||
return INSUFFICIENT_CRYPTO_RESOURCES_5;
|
||||
return INSUFFICIENT_CRYPTO_RESOURCES;
|
||||
case OEMCrypto_ERROR_KEY_EXPIRED:
|
||||
return NEED_KEY;
|
||||
case OEMCrypto_ERROR_INVALID_SESSION:
|
||||
@@ -2494,7 +2500,7 @@ CdmResponseType CryptoSession::CreateUsageEntry(uint32_t* entry_number) {
|
||||
case OEMCrypto_SUCCESS:
|
||||
return NO_ERROR;
|
||||
case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES:
|
||||
return INSUFFICIENT_CRYPTO_RESOURCES_3;
|
||||
return INSUFFICIENT_CRYPTO_RESOURCES;
|
||||
case OEMCrypto_ERROR_SESSION_LOST_STATE:
|
||||
return SESSION_LOST_STATE_ERROR;
|
||||
case OEMCrypto_ERROR_SYSTEM_INVALIDATED:
|
||||
|
||||
@@ -300,7 +300,7 @@ CdmResponseType UsageTableHeader::AddEntry(
|
||||
|
||||
CdmResponseType status = crypto_session->CreateUsageEntry(usage_entry_number);
|
||||
|
||||
if (status == INSUFFICIENT_CRYPTO_RESOURCES_3) {
|
||||
if (status == INSUFFICIENT_CRYPTO_RESOURCES) {
|
||||
LOGW("Usage table may be full, releasing oldest entry: size = %zu",
|
||||
usage_entry_info_.size());
|
||||
status = ReleaseOldestEntry(metrics);
|
||||
|
||||
@@ -284,21 +284,6 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) {
|
||||
case INSUFFICIENT_CRYPTO_RESOURCES:
|
||||
*os << "INSUFFICIENT_CRYPTO_RESOURCES";
|
||||
break;
|
||||
case INSUFFICIENT_CRYPTO_RESOURCES_2:
|
||||
*os << "INSUFFICIENT_CRYPTO_RESOURCES_2";
|
||||
break;
|
||||
case INSUFFICIENT_CRYPTO_RESOURCES_3:
|
||||
*os << "INSUFFICIENT_CRYPTO_RESOURCES_3";
|
||||
break;
|
||||
case INSUFFICIENT_CRYPTO_RESOURCES_4:
|
||||
*os << "INSUFFICIENT_CRYPTO_RESOURCES_4";
|
||||
break;
|
||||
case INSUFFICIENT_CRYPTO_RESOURCES_5:
|
||||
*os << "INSUFFICIENT_CRYPTO_RESOURCES_5";
|
||||
break;
|
||||
case INSUFFICIENT_CRYPTO_RESOURCES_6:
|
||||
*os << "INSUFFICIENT_CRYPTO_RESOURCES_6";
|
||||
break;
|
||||
case INSUFFICIENT_OUTPUT_PROTECTION:
|
||||
*os << "INSUFFICIENT_OUTPUT_PROTECTION";
|
||||
break;
|
||||
|
||||
@@ -904,10 +904,9 @@ TEST_F(UsageTableHeaderTest,
|
||||
Return(NO_ERROR)));
|
||||
|
||||
EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull()))
|
||||
.WillOnce(Return(INSUFFICIENT_CRYPTO_RESOURCES_3))
|
||||
.WillOnce(
|
||||
DoAll(SetArgPointee<0>(expected_usage_entry_number),
|
||||
Return(NO_ERROR)));
|
||||
.WillOnce(Return(INSUFFICIENT_CRYPTO_RESOURCES))
|
||||
.WillOnce(DoAll(SetArgPointee<0>(expected_usage_entry_number),
|
||||
Return(NO_ERROR)));
|
||||
|
||||
EXPECT_CALL(*device_files_, StoreUsageTableInfo(kUsageTableHeader, _))
|
||||
.WillOnce(DoAll(SaveArg<1>(&final_usage_entries), Return(true)));
|
||||
@@ -954,11 +953,11 @@ TEST_F(UsageTableHeaderTest, AddEntry_CreateUsageEntryFailsEveryTime) {
|
||||
|
||||
EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull()))
|
||||
.Times(2)
|
||||
.WillRepeatedly(Return(INSUFFICIENT_CRYPTO_RESOURCES_3));
|
||||
.WillRepeatedly(Return(INSUFFICIENT_CRYPTO_RESOURCES));
|
||||
|
||||
// Now invoke the method under test
|
||||
uint32_t usage_entry_number;
|
||||
EXPECT_EQ(INSUFFICIENT_CRYPTO_RESOURCES_3,
|
||||
EXPECT_EQ(INSUFFICIENT_CRYPTO_RESOURCES,
|
||||
mock_usage_table_header->AddEntry(
|
||||
crypto_session_, true /* persistent */,
|
||||
kUsageEntryInfoOfflineLicense6.key_set_id,
|
||||
|
||||
@@ -212,16 +212,6 @@ static android::status_t mapCdmResponseType(wvcdm::CdmResponseType res) {
|
||||
return kIncorrectUsageSupportType2;
|
||||
case wvcdm::INIT_DATA_NOT_FOUND:
|
||||
return kInitDataNotFound;
|
||||
case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_2:
|
||||
return kInsufficientCryptoResources2;
|
||||
case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_3:
|
||||
return kInsufficientCryptoResources3;
|
||||
case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_4:
|
||||
return kInsufficientCryptoResources4;
|
||||
case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_5:
|
||||
return kInsufficientCryptoResources5;
|
||||
case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_6:
|
||||
return kInsufficientCryptoResources6;
|
||||
case wvcdm::INVALID_DECRYPT_HASH_FORMAT:
|
||||
return kInvalidDecryptHashFormat;
|
||||
case wvcdm::INVALID_DECRYPT_PARAMETERS_ENG_1:
|
||||
|
||||
@@ -225,7 +225,6 @@ static Status mapCdmResponseType(wvcdm::CdmResponseType res) {
|
||||
case wvcdm::INVALID_SESSION_1:
|
||||
case wvcdm::NO_DEVICE_KEY_1:
|
||||
case wvcdm::NO_CONTENT_KEY_2:
|
||||
case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_2:
|
||||
case wvcdm::INVALID_PARAMETERS_ENG_13:
|
||||
case wvcdm::INVALID_PARAMETERS_ENG_14:
|
||||
case wvcdm::INVALID_PARAMETERS_ENG_15:
|
||||
@@ -238,9 +237,6 @@ static Status mapCdmResponseType(wvcdm::CdmResponseType res) {
|
||||
case wvcdm::LOAD_USAGE_HEADER_SIGNATURE_FAILURE:
|
||||
case wvcdm::LOAD_USAGE_HEADER_BAD_MAGIC:
|
||||
case wvcdm::LOAD_USAGE_HEADER_UNKNOWN_ERROR:
|
||||
case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_3:
|
||||
case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_4:
|
||||
case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_5:
|
||||
case wvcdm::CREATE_USAGE_ENTRY_UNKNOWN_ERROR:
|
||||
case wvcdm::LOAD_USAGE_ENTRY_GENERATION_SKEW:
|
||||
case wvcdm::LOAD_USAGE_ENTRY_SIGNATURE_FAILURE:
|
||||
@@ -293,7 +289,6 @@ static Status mapCdmResponseType(wvcdm::CdmResponseType res) {
|
||||
case wvcdm::REMOVE_USAGE_INFO_ERROR_1:
|
||||
case wvcdm::REMOVE_USAGE_INFO_ERROR_2:
|
||||
case wvcdm::REMOVE_USAGE_INFO_ERROR_3:
|
||||
case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_6:
|
||||
case wvcdm::NOT_AN_ENTITLEMENT_SESSION:
|
||||
case wvcdm::LOAD_ENTITLED_CONTENT_KEYS_ERROR:
|
||||
case wvcdm::GET_PROVISIONING_METHOD_ERROR:
|
||||
|
||||
Reference in New Issue
Block a user