blob: 7df26bc4d51e8f2ebc2f702db6dfe249702dc270 [file]
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <windows.h>
#include <dbghelp.h>
namespace {
// In SDK 10.0.28000+, dbghelp.dll dynamically loads msdia140.dll at runtime,
// and symbolization calls WinVerifyTrust which creates threads in crypt32.
// If dbghelp is initialized during ASAN symbolization of a crash, this
// causes reentrancy or deadlocks inside AddressSanitizer's thread registry
// or malloc handlers (see crbug.com/548509159). Therefore, we preload these
// DLLs and initialize DbgHelp before fuzzing starts.
struct WinDllPreloader {
WinDllPreloader() {
::LoadLibraryW(L"dbghelp.dll");
::LoadLibraryW(L"msdia140.dll");
if (::SymInitialize(::GetCurrentProcess(), nullptr, TRUE)) {
::SymCleanup(::GetCurrentProcess());
}
}
} g_win_dll_preloader;
} // namespace