google / syzygy

Syzygy Transformation Toolchain
Apache License 2.0
355 stars 59 forks source link

Faults in UnhandledExceptionFilter go to WER #58

Open sigurasg opened 6 years ago

sigurasg commented 6 years ago

I just suffered a DCHECK in my SyzyASAN canary, which brought up the WER dialog. Looking at the crash (I have a full memory dump), there are several interesting things to note.

In any case, I think at minimum the heap scrubbing, and perhaps all of the UEF should be under an SEH, so that the UEF can defer to the next-in-line UEF on exception...

--- thread at fault in amd64 --- 9 Id: d480.9514 Suspend: 1 Teb: 00000000`05050000 Unfrozen

Call Site

00 wow64!Wow64NotifyDebugger 01 wow64!HandleRaiseException 02 wow64!Wow64NtRaiseException 03 wow64!whNtRaiseException 04 wow64!Wow64SystemServiceEx 05 wow64cpu!ServiceNoTurbo 06 wow64!RunCpuSimulation 07 wow64!Wow64LdrpInitialize 08 ntdll!_LdrpInitialize 09 ntdll!LdrInitializeThunk

--- thread at fault in x86 --- 0:009:x86> kc

00 syzyasan_rtl!agent::asan::BlockBodyIsFloodFilled 01 syzyasan_rtl!agent::asan::IsBlockCorrupt 02 syzyasan_rtl!agent::asan::HeapChecker::GetCorruptRangesInSlab 03 syzyasan_rtl!agent::asan::HeapChecker::IsHeapCorrupt 04 syzyasan_rtl!agent::asan::AsanRuntime::ExceptionFilterImpl 05 syzyasan_rtl!agent::asan::AsanRuntime::UnhandledExceptionFilter 06 KERNELBASE!UnhandledExceptionFilter 07 ntdll_77c60000!__RtlUserThreadStart 08 ntdll_77c60000!_RtlUserThreadStart

--- exception being handled --- 0:009:x86> kc *** Stack trace for last set context - .thread/.cxr resets it

00 chrome_65980000!base::debug::BreakDebugger 01 chrome_65980000!logging::LogMessage::~LogMessage 02 chrome_65980000!base::debug::GlobalActivityTracker::RecordProcessLaunch 03 chrome_65980000!content::StartSandboxedProcessInternal 04 chrome_65980000!content::StartSandboxedProcess 05 chrome_65980000!content::internal::ChildProcessLauncherHelper::LaunchProcessOnLauncherThread 06 chrome_65980000!content::internal::ChildProcessLauncherHelper::LaunchOnLauncherThread 07 chrome_65980000!base::internal::FunctorTraits<void (thiscall DevToolsFileWatcher::SharedFileWatcher::*)(void),void>::Invoke 08 chrome_65980000!base::internal::InvokeHelper<0,void>::MakeItSo 09 chrome_65980000!base::internal::Invoker<base::internal::BindState<void (thiscall DevToolsFileWatcher::SharedFileWatcher::)(void),scoped_refptr >,void __cdecl(void)>::RunImpl 0a chrome_65980000!base::internal::Invoker<base::internal::BindState<void (__thiscall DevToolsFileWatcher::SharedFileWatcher::)(void),scoped_refptr >,void __cdecl(void)>::RunOnce 0b chrome_65980000!base::OnceCallback<void cdecl(void)>::Run 0c chrome_65980000!base::debug::TaskAnnotator::RunTask 0d chrome_65980000!base::internal::TaskTracker::RunOrSkipTask 0e chrome_65980000!base::internal::TaskTracker::RunNextTask 0f chrome_65980000!base::internal::SchedulerWorker::Thread::ThreadMain 10 chrome_65980000!base::`anonymous namespace'::ThreadFunc 11 KERNEL32!BaseThreadInitThunk 12 ntdll_77c60000!RtlUserThreadStart 13 ntdll_77c60000!_RtlUserThreadStart

--- frolicking thread --- 0:013:x86> kc

00 syzyasan_rtl!SuperFastHash 01 syzyasan_rtl!base::SuperFastHash 02 syzyasan_rtl!agent::asan::BlockSetChecksum 03 syzyasan_rtl!agent::asan::heap_managers::BlockHeapManager::Free 04 syzyasan_rtl!agent::asan::WindowsHeapAdapter::HeapFree 05 syzyasan_rtl!asan_HeapFree 06 chrome_65980000!base::allocator::WinHeapFree 07 chrome_65980000!anonymous namespace'::DefaultWinHeapFreeImpl 08 chrome_65980000!ShimFree 09 chrome_65980000!free 0a chrome_65980000!sk_free 0b chrome_65980000!SkMallocPixelRef::{dtor} 0c chrome_65980000!SkMallocPixelRef::scalar deleting destructor' 0d chrome_65980000!SkRefCntBase::internal_dispose 0e chrome_65980000!SkRefCntBase::unref 0f chrome_65980000!SkSafeUnref 10 chrome_65980000!sk_sp::{dtor} 11 chrome_65980000!SkBitmap::~SkBitmap 12 chrome_65980000!SkImage_Raster::{dtor} 13 chrome_65980000!SkImage_Raster::scalar deleting destructor' 14 chrome_65980000!SkRefCntBase::internal_dispose 15 chrome_65980000!SkRefCntBase::unref 16 chrome_65980000!SkSafeUnref 17 chrome_65980000!sk_sp<SkImage>::{dtor} 18 chrome_65980000!SkImageShader::scalar deleting destructor' 19 chrome_65980000!SkRefCntBase::internal_dispose 1a chrome_65980000!SkRefCntBase::unref 1b chrome_65980000!SkSafeUnref 1c chrome_65980000!sk_sp::{dtor} 1d chrome_65980000!SkPaint::~SkPaint 1e chrome_65980000!SkColorSpaceXformCanvas::onDrawRect 1f chrome_65980000!SkCanvas::drawRect 20 chrome_65980000!cc::DrawRectOp::RasterWithFlags 21 chrome_65980000!cc::Rasterizer<cc::DrawRectOp,1>::Raster 22 chrome_65980000!cc::::operator() 23 chrome_65980000!:: 24 chrome_65980000!cc::PaintOp::Raster 25 chrome_65980000!cc::PaintOpBuffer::Playback