Add mutex to CdmEngine for use of cert_provisioning_.

[ Merge of http://go/wvgerrit/167500 ]
[ PoC http://ag/21891126 ]

Bug: 258188673
Test: sts-tradefed run sts-dynamic-develop -m StsHostTestCases \
    -t android.security.sts.Bug_258188673
Test: GtsMediaTestCases
Change-Id: If71a0e7a81f376cf28688a590b6cb9dcea699545
Merged-In: If71a0e7a81f376cf28688a590b6cb9dcea699545
This commit is contained in:
Alex Dale
2023-03-07 13:32:37 -08:00
parent b2203809a1
commit 491dfe7690
2 changed files with 4 additions and 1 deletions

View File

@@ -394,6 +394,8 @@ class CdmEngine {
CdmSessionMap session_map_; CdmSessionMap session_map_;
CdmReleaseKeySetMap release_key_sets_; CdmReleaseKeySetMap release_key_sets_;
std::unique_ptr<CertificateProvisioning> cert_provisioning_; std::unique_ptr<CertificateProvisioning> cert_provisioning_;
// Lock must be acquired before using |cert_provisioning_|.
std::mutex cert_provisioning_mutex_;
FileSystem* file_system_; FileSystem* file_system_;
Clock clock_; Clock clock_;
std::string spoid_; std::string spoid_;

View File

@@ -62,7 +62,6 @@ class UsagePropertySet : public CdmClientPropertySet {
CdmEngine::CdmEngine(FileSystem* file_system, CdmEngine::CdmEngine(FileSystem* file_system,
std::shared_ptr<metrics::EngineMetrics> metrics) std::shared_ptr<metrics::EngineMetrics> metrics)
: metrics_(metrics), : metrics_(metrics),
cert_provisioning_(),
file_system_(file_system), file_system_(file_system),
spoid_(EMPTY_SPOID), spoid_(EMPTY_SPOID),
usage_session_(), usage_session_(),
@@ -915,6 +914,7 @@ CdmResponseType CdmEngine::GetProvisioningRequest(
} }
// TODO(b/141705730): Remove usage entries on provisioning. // TODO(b/141705730): Remove usage entries on provisioning.
std::unique_lock<std::mutex> cert_lock(cert_provisioning_mutex_);
if (!cert_provisioning_) { if (!cert_provisioning_) {
cert_provisioning_.reset( cert_provisioning_.reset(
new CertificateProvisioning(metrics_->GetCryptoMetrics())); new CertificateProvisioning(metrics_->GetCryptoMetrics()));
@@ -944,6 +944,7 @@ CdmResponseType CdmEngine::HandleProvisioningResponse(
std::string* wrapped_key) { std::string* wrapped_key) {
LOGI("response_size = %zu, security_level = %s", response.size(), LOGI("response_size = %zu, security_level = %s", response.size(),
SecurityLevelToString(requested_security_level)); SecurityLevelToString(requested_security_level));
std::unique_lock<std::mutex> cert_lock(cert_provisioning_mutex_);
if (response.empty()) { if (response.empty()) {
LOGE("Empty provisioning response"); LOGE("Empty provisioning response");
cert_provisioning_.reset(); cert_provisioning_.reset();