summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Kobziev (GitHub) <43001407+SKobziev@users.noreply.github.com>2020-02-11 17:49:54 +0200
committerGitHub <noreply@github.com>2020-02-11 10:49:53 -0500
commit9d4a036bb437c1a5a7de4b73425073ea3e0d2987 (patch)
treef7667e7d1df773436cdcb6b9a3f13b4bf370ebc2
parent793e78112298453effb3cbf771e960a2352bfc0c (diff)
downloadsdl_core-9d4a036bb437c1a5a7de4b73425073ea3e0d2987.tar.gz
Prevent creation of SSL context during certificate updating (#2777)
* Prevent creation of SSL context during certificate updating Added sync primitive into CryptoManagerImpl as class member and added lock into OnCertificateUpdated, CreateSSLContext methods for preventing race conditions * fixup! Prevent creation of SSL context during certificate updating Co-authored-by: Yevhenii Dementieiev (GitHub) <57259850+ydementieiev@users.noreply.github.com>
-rw-r--r--src/components/security_manager/include/security_manager/crypto_manager_impl.h1
-rw-r--r--src/components/security_manager/src/crypto_manager_impl.cc3
2 files changed, 4 insertions, 0 deletions
diff --git a/src/components/security_manager/include/security_manager/crypto_manager_impl.h b/src/components/security_manager/include/security_manager/crypto_manager_impl.h
index 46fd1a5995..42abe6e3b6 100644
--- a/src/components/security_manager/include/security_manager/crypto_manager_impl.h
+++ b/src/components/security_manager/include/security_manager/crypto_manager_impl.h
@@ -206,6 +206,7 @@ class CryptoManagerImpl : public CryptoManager {
SSL_CTX* context_;
static uint32_t instance_count_;
static sync_primitives::Lock instance_lock_;
+ sync_primitives::Lock crypto_manager_lock_;
DISALLOW_COPY_AND_ASSIGN(CryptoManagerImpl);
};
} // namespace security_manager
diff --git a/src/components/security_manager/src/crypto_manager_impl.cc b/src/components/security_manager/src/crypto_manager_impl.cc
index cb42d5b46c..48b3119bec 100644
--- a/src/components/security_manager/src/crypto_manager_impl.cc
+++ b/src/components/security_manager/src/crypto_manager_impl.cc
@@ -283,6 +283,7 @@ bool CryptoManagerImpl::Init() {
bool CryptoManagerImpl::OnCertificateUpdated(const std::string& data) {
LOG4CXX_AUTO_TRACE(logger_);
+ sync_primitives::AutoLock lock(crypto_manager_lock_);
if (!context_) {
LOG4CXX_WARN(logger_, "Not initialized");
return false;
@@ -307,6 +308,8 @@ bool CryptoManagerImpl::OnCertificateUpdated(const std::string& data) {
}
SSLContext* CryptoManagerImpl::CreateSSLContext() {
+ LOG4CXX_AUTO_TRACE(logger_);
+ sync_primitives::AutoLock lock(crypto_manager_lock_);
if (NULL == context_) {
return NULL;
}