Merge "Cleaned up OEMCrypto security level getter." into sc-dev
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user