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