summaryrefslogtreecommitdiff
path: root/platform/windows
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2024-11-06 11:05:56 -0500
committerMason Reed <mason@vector35.com>2024-11-08 03:13:51 -0500
commit51d9a9c1d36cbf183f9b8b9fa3b64dc4997da83e (patch)
tree0fb8801d67b7028c9eb5720d495fbb7ee74b251b /platform/windows
parent6374e3fecfda083cdb7c2b454e5ed58cd631cc20 (diff)
Prevent race in windows platform binary view initialization
Diffstat (limited to 'platform/windows')
-rw-r--r--platform/windows/platform_windows.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/platform/windows/platform_windows.cpp b/platform/windows/platform_windows.cpp
index 0c33bbee..b4b7c55d 100644
--- a/platform/windows/platform_windows.cpp
+++ b/platform/windows/platform_windows.cpp
@@ -9,6 +9,7 @@ class WindowsX86Platform: public Platform
{
uint32_t m_fsbase;
Ref<Type> m_teb;
+ std::mutex m_tebMutex;
public:
WindowsX86Platform(Architecture* arch): Platform(arch, "windows-x86")
@@ -45,6 +46,8 @@ public:
virtual void BinaryViewInit(BinaryView* view) override
{
+ // Locking here so that if we have two views in BinaryViewInit at once we don't race to init m_teb.
+ std::lock_guard<std::mutex> lock(m_tebMutex);
if (!m_teb)
m_teb = Type::PointerType(GetArchitecture()->GetAddressSize(), Type::NamedType(QualifiedName("TEB"), GetTypeByName(QualifiedName("TEB"))));
}