mirror of
https://git.suyu.dev/suyu/breakpad.git
synced 2025-12-22 21:56:18 +01:00
Adds fastfail subcodes as distinct failure reasons
Previously these all resulted in EXCEPTION_STACK_BUFFER_OVERRUN but this hides various specific fast fail crash types, which are now provided based on the exception's subcode. Tests: added to minidump_process_unittest.cc Bug: 865632 Change-Id: Ic6693de247da55cf6d132d108c6e20c635f366b1 Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3771437 Reviewed-by: Robert Sesek <rsesek@chromium.org>
This commit is contained in:
parent
335e61656f
commit
e467c59c68
4 changed files with 303 additions and 1 deletions
|
|
@ -1330,7 +1330,220 @@ string MinidumpProcessor::GetCrashReason(Minidump* dump, uint64_t* address) {
|
|||
reason = "EXCEPTION_POSSIBLE_DEADLOCK";
|
||||
break;
|
||||
case MD_EXCEPTION_CODE_WIN_STACK_BUFFER_OVERRUN:
|
||||
reason = "EXCEPTION_STACK_BUFFER_OVERRUN";
|
||||
if (raw_exception->exception_record.number_parameters >= 1) {
|
||||
MDFastFailSubcodeTypeWin subcode =
|
||||
static_cast<MDFastFailSubcodeTypeWin>(
|
||||
raw_exception->exception_record.exception_information[0]);
|
||||
switch (subcode) {
|
||||
// Note - we skip the '0'/GS case as it exists for legacy reasons.
|
||||
case MD_FAST_FAIL_VTGUARD_CHECK_FAILURE:
|
||||
reason = "FAST_FAIL_VTGUARD_CHECK_FAILURE";
|
||||
break;
|
||||
case MD_FAST_FAIL_STACK_COOKIE_CHECK_FAILURE:
|
||||
reason = "FAST_FAIL_STACK_COOKIE_CHECK_FAILURE";
|
||||
break;
|
||||
case MD_FAST_FAIL_CORRUPT_LIST_ENTRY:
|
||||
reason = "FAST_FAIL_CORRUPT_LIST_ENTRY";
|
||||
break;
|
||||
case MD_FAST_FAIL_INCORRECT_STACK:
|
||||
reason = "FAST_FAIL_INCORRECT_STACK";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_ARG:
|
||||
reason = "FAST_FAIL_INVALID_ARG";
|
||||
break;
|
||||
case MD_FAST_FAIL_GS_COOKIE_INIT:
|
||||
reason = "FAST_FAIL_GS_COOKIE_INIT";
|
||||
break;
|
||||
case MD_FAST_FAIL_FATAL_APP_EXIT:
|
||||
reason = "FAST_FAIL_FATAL_APP_EXIT";
|
||||
break;
|
||||
case MD_FAST_FAIL_RANGE_CHECK_FAILURE:
|
||||
reason = "FAST_FAIL_RANGE_CHECK_FAILURE";
|
||||
break;
|
||||
case MD_FAST_FAIL_UNSAFE_REGISTRY_ACCESS:
|
||||
reason = "FAST_FAIL_UNSAFE_REGISTRY_ACCESS";
|
||||
break;
|
||||
case MD_FAST_FAIL_GUARD_ICALL_CHECK_FAILURE:
|
||||
reason = "FAST_FAIL_GUARD_ICALL_CHECK_FAILURE";
|
||||
break;
|
||||
case MD_FAST_FAIL_GUARD_WRITE_CHECK_FAILURE:
|
||||
reason = "FAST_FAIL_GUARD_WRITE_CHECK_FAILURE";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_FIBER_SWITCH:
|
||||
reason = "FAST_FAIL_INVALID_FIBER_SWITCH";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_SET_OF_CONTEXT:
|
||||
reason = "FAST_FAIL_INVALID_SET_OF_CONTEXT";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_REFERENCE_COUNT:
|
||||
reason = "FAST_FAIL_INVALID_REFERENCE_COUNT";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_JUMP_BUFFER:
|
||||
reason = "FAST_FAIL_INVALID_JUMP_BUFFER";
|
||||
break;
|
||||
case MD_FAST_FAIL_MRDATA_MODIFIED:
|
||||
reason = "FAST_FAIL_MRDATA_MODIFIED";
|
||||
break;
|
||||
case MD_FAST_FAIL_CERTIFICATION_FAILURE:
|
||||
reason = "FAST_FAIL_CERTIFICATION_FAILURE";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_EXCEPTION_CHAIN:
|
||||
reason = "FAST_FAIL_INVALID_EXCEPTION_CHAIN";
|
||||
break;
|
||||
case MD_FAST_FAIL_CRYPTO_LIBRARY:
|
||||
reason = "FAST_FAIL_CRYPTO_LIBRARY";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT:
|
||||
reason = "FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_IMAGE_BASE:
|
||||
reason = "FAST_FAIL_INVALID_IMAGE_BASE";
|
||||
break;
|
||||
case MD_FAST_FAIL_DLOAD_PROTECTION_FAILURE:
|
||||
reason = "FAST_FAIL_DLOAD_PROTECTION_FAILURE";
|
||||
break;
|
||||
case MD_FAST_FAIL_UNSAFE_EXTENSION_CALL:
|
||||
reason = "FAST_FAIL_UNSAFE_EXTENSION_CALL";
|
||||
break;
|
||||
case MD_FAST_FAIL_DEPRECATED_SERVICE_INVOKED:
|
||||
reason = "FAST_FAIL_DEPRECATED_SERVICE_INVOKED";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_BUFFER_ACCESS:
|
||||
reason = "FAST_FAIL_INVALID_BUFFER_ACCESS";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_BALANCED_TREE:
|
||||
reason = "FAST_FAIL_INVALID_BALANCED_TREE";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_NEXT_THREAD:
|
||||
reason = "FAST_FAIL_INVALID_NEXT_THREAD";
|
||||
break;
|
||||
case MD_FAST_FAIL_GUARD_ICALL_CHECK_SUPPRESSED:
|
||||
reason = "FAST_FAIL_GUARD_ICALL_CHECK_SUPPRESSED";
|
||||
break;
|
||||
case MD_FAST_FAIL_APCS_DISABLED:
|
||||
reason = "FAST_FAIL_APCS_DISABLED";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_IDLE_STATE:
|
||||
reason = "FAST_FAIL_INVALID_IDLE_STATE";
|
||||
break;
|
||||
case MD_FAST_FAIL_MRDATA_PROTECTION_FAILURE:
|
||||
reason = "FAST_FAIL_MRDATA_PROTECTION_FAILURE";
|
||||
break;
|
||||
case MD_FAST_FAIL_UNEXPECTED_HEAP_EXCEPTION:
|
||||
reason = "FAST_FAIL_UNEXPECTED_HEAP_EXCEPTION";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_LOCK_STATE:
|
||||
reason = "FAST_FAIL_INVALID_LOCK_STATE";
|
||||
break;
|
||||
case MD_FAST_FAIL_GUARD_JUMPTABLE:
|
||||
reason = "FAST_FAIL_GUARD_JUMPTABLE";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_LONGJUMP_TARGET:
|
||||
reason = "FAST_FAIL_INVALID_LONGJUMP_TARGET";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_DISPATCH_CONTEXT:
|
||||
reason = "FAST_FAIL_INVALID_DISPATCH_CONTEXT";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_THREAD:
|
||||
reason = "FAST_FAIL_INVALID_THREAD";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_SYSCALL_NUMBER:
|
||||
reason = "FAST_FAIL_INVALID_SYSCALL_NUMBER";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_FILE_OPERATION:
|
||||
reason = "FAST_FAIL_INVALID_FILE_OPERATION";
|
||||
break;
|
||||
case MD_FAST_FAIL_LPAC_ACCESS_DENIED:
|
||||
reason = "FAST_FAIL_LPAC_ACCESS_DENIED";
|
||||
break;
|
||||
case MD_FAST_FAIL_GUARD_SS_FAILURE:
|
||||
reason = "FAST_FAIL_GUARD_SS_FAILURE";
|
||||
break;
|
||||
case MD_FAST_FAIL_LOADER_CONTINUITY_FAILURE:
|
||||
reason = "FAST_FAIL_LOADER_CONTINUITY_FAILURE";
|
||||
break;
|
||||
case MD_FAST_FAIL_GUARD_EXPORT_SUPPRESSION_FAILURE:
|
||||
reason = "FAST_FAIL_GUARD_EXPORT_SUPPRESSION_FAILURE";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_CONTROL_STACK:
|
||||
reason = "FAST_FAIL_INVALID_CONTROL_STACK";
|
||||
break;
|
||||
case MD_FAST_FAIL_SET_CONTEXT_DENIED:
|
||||
reason = "FAST_FAIL_SET_CONTEXT_DENIED";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_IAT:
|
||||
reason = "FAST_FAIL_INVALID_IAT";
|
||||
break;
|
||||
case MD_FAST_FAIL_HEAP_METADATA_CORRUPTION:
|
||||
reason = "FAST_FAIL_HEAP_METADATA_CORRUPTION";
|
||||
break;
|
||||
case MD_FAST_FAIL_PAYLOAD_RESTRICTION_VIOLATION:
|
||||
reason = "FAST_FAIL_PAYLOAD_RESTRICTION_VIOLATION";
|
||||
break;
|
||||
case MD_FAST_FAIL_LOW_LABEL_ACCESS_DENIED:
|
||||
reason = "FAST_FAIL_LOW_LABEL_ACCESS_DENIED";
|
||||
break;
|
||||
case MD_FAST_FAIL_ENCLAVE_CALL_FAILURE:
|
||||
reason = "FAST_FAIL_ENCLAVE_CALL_FAILURE";
|
||||
break;
|
||||
case MD_FAST_FAIL_UNHANDLED_LSS_EXCEPTON:
|
||||
reason = "FAST_FAIL_UNHANDLED_LSS_EXCEPTON";
|
||||
break;
|
||||
case MD_FAST_FAIL_ADMINLESS_ACCESS_DENIED:
|
||||
reason = "FAST_FAIL_ADMINLESS_ACCESS_DENIED";
|
||||
break;
|
||||
case MD_FAST_FAIL_UNEXPECTED_CALL:
|
||||
reason = "FAST_FAIL_UNEXPECTED_CALL";
|
||||
break;
|
||||
case MD_FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS:
|
||||
reason = "FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS";
|
||||
break;
|
||||
case MD_FAST_FAIL_UNEXPECTED_HOST_BEHAVIOR:
|
||||
reason = "FAST_FAIL_UNEXPECTED_HOST_BEHAVIOR";
|
||||
break;
|
||||
case MD_FAST_FAIL_FLAGS_CORRUPTION:
|
||||
reason = "FAST_FAIL_FLAGS_CORRUPTION";
|
||||
break;
|
||||
case MD_FAST_FAIL_VEH_CORRUPTION:
|
||||
reason = "FAST_FAIL_VEH_CORRUPTION";
|
||||
break;
|
||||
case MD_FAST_FAIL_ETW_CORRUPTION:
|
||||
reason = "FAST_FAIL_ETW_CORRUPTION";
|
||||
break;
|
||||
case MD_FAST_FAIL_RIO_ABORT:
|
||||
reason = "FAST_FAIL_RIO_ABORT";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_PFN:
|
||||
reason = "FAST_FAIL_INVALID_PFN";
|
||||
break;
|
||||
case MD_FAST_FAIL_GUARD_ICALL_CHECK_FAILURE_XFG:
|
||||
reason = "FAST_FAIL_GUARD_ICALL_CHECK_FAILURE_XFG";
|
||||
break;
|
||||
case MD_FAST_FAIL_CAST_GUARD:
|
||||
reason = "FAST_FAIL_CAST_GUARD";
|
||||
break;
|
||||
case MD_FAST_FAIL_HOST_VISIBILITY_CHANGE:
|
||||
reason = "FAST_FAIL_HOST_VISIBILITY_CHANGE";
|
||||
break;
|
||||
case MD_FAST_FAIL_KERNEL_CET_SHADOW_STACK_ASSIST:
|
||||
reason = "FAST_FAIL_KERNEL_CET_SHADOW_STACK_ASSIST";
|
||||
break;
|
||||
case MD_FAST_FAIL_PATCH_CALLBACK_FAILED:
|
||||
reason = "FAST_FAIL_PATCH_CALLBACK_FAILED";
|
||||
break;
|
||||
case MD_FAST_FAIL_NTDLL_PATCH_FAILED:
|
||||
reason = "FAST_FAIL_NTDLL_PATCH_FAILED";
|
||||
break;
|
||||
case MD_FAST_FAIL_INVALID_FLS_DATA:
|
||||
reason = "FAST_FAIL_INVALID_FLS_DATA";
|
||||
break;
|
||||
default:
|
||||
reason = "EXCEPTION_STACK_BUFFER_OVERRUN";
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
reason = "EXCEPTION_STACK_BUFFER_OVERRUN";
|
||||
}
|
||||
break;
|
||||
case MD_EXCEPTION_CODE_WIN_HEAP_CORRUPTION:
|
||||
reason = "EXCEPTION_HEAP_CORRUPTION";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue