diff options
| author | Mason Reed <mason@vector35.com> | 2024-11-06 11:05:56 -0500 |
|---|---|---|
| committer | Mason Reed <mason@vector35.com> | 2024-11-08 03:13:51 -0500 |
| commit | 51d9a9c1d36cbf183f9b8b9fa3b64dc4997da83e (patch) | |
| tree | 0fb8801d67b7028c9eb5720d495fbb7ee74b251b /platform | |
| parent | 6374e3fecfda083cdb7c2b454e5ed58cd631cc20 (diff) | |
Prevent race in windows platform binary view initialization
Diffstat (limited to 'platform')
| -rw-r--r-- | platform/windows/platform_windows.cpp | 3 |
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")))); } |
