diff options
author | Stanislav Kobziev (GitHub) <43001407+SKobziev@users.noreply.github.com> | 2020-02-11 17:49:54 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-11 10:49:53 -0500 |
commit | 9d4a036bb437c1a5a7de4b73425073ea3e0d2987 (patch) | |
tree | f7667e7d1df773436cdcb6b9a3f13b4bf370ebc2 | |
parent | 793e78112298453effb3cbf771e960a2352bfc0c (diff) | |
download | sdl_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.h | 1 | ||||
-rw-r--r-- | src/components/security_manager/src/crypto_manager_impl.cc | 3 |
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; } |