Merge "Cleaned up OEMCrypto security level getter." into sc-dev

This commit is contained in:
Alex Dale
2021-04-09 20:59:39 +00:00
committed by Android (Google) Code Review

View File

@@ -490,37 +490,46 @@ CdmSecurityLevel CryptoSession::GetSecurityLevel() {
}
CdmSecurityLevel CryptoSession::GetSecurityLevel(
SecurityLevel requested_level) {
LOGV("Getting security level: requested_level = %d",
static_cast<int>(requested_level));
SecurityLevel requested_security_level) {
LOGV("Getting security level: requested_security_level = %d",
static_cast<int>(requested_security_level));
RETURN_IF_UNINITIALIZED(kSecurityLevelUninitialized);
std::string security_level;
WithOecReadLock("GetSecurityLevel", [&] {
security_level = OEMCrypto_SecurityLevel(requested_level);
const char* const level = WithOecReadLock("GetSecurityLevel", [&] {
return OEMCrypto_SecurityLevel(requested_security_level);
});
if ((security_level.size() != 2) || (security_level.at(0) != 'L')) {
if (level == nullptr) {
LOGE("Security level is null: requested_security_level = %d",
static_cast<int>(requested_security_level));
return kSecurityLevelUnknown;
}
CdmSecurityLevel cdm_security_level;
switch (security_level.at(1)) {
case '1':
cdm_security_level = kSecurityLevelL1;
break;
case '2':
cdm_security_level = kSecurityLevelL2;
break;
case '3':
cdm_security_level = kSecurityLevelL3;
break;
default:
cdm_security_level = kSecurityLevelUnknown;
break;
// Check length in the event of a bad pointer.
// |kMaxSecurityLevelLength| is a value larger than expected to
// be able to detect an overrun.
constexpr size_t kMaxSecurityLevelLength = 5;
const size_t length = strnlen(level, kMaxSecurityLevelLength);
constexpr size_t kExpectedSecurityLevelLength = 2;
if (length != kExpectedSecurityLevelLength) {
LOGE(
"Unexpected security level length: "
"length = %zu, requested_security_level = %d",
length, static_cast<int>(requested_security_level));
return kSecurityLevelUnknown;
}
return cdm_security_level;
const std::string security_level(level);
if (security_level == "L1") {
return kSecurityLevelL1;
}
if (security_level == "L2") {
return kSecurityLevelL2;
}
if (security_level == "L3") {
return kSecurityLevelL3;
}
LOGE(
"Ill-formed security level: "
"level = \"%s\", requested_security_level = %d",
security_level.c_str(), static_cast<int>(requested_security_level));
return kSecurityLevelUnknown;
}
CdmResponseType CryptoSession::GetInternalDeviceUniqueId(