VirtualBox

Changeset 105464 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Jul 24, 2024 9:01:57 AM (9 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
164123
Message:

VMM/DBGFR3BugCheck: More 13a and 139 details. bugref:10727

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/DBGFR3BugCheck.cpp

    r105409 r105464  
    609609        case 0x00000138: cchUsed = RTStrPrintf(pszDetails, cbDetails, "GPIO_CONTROLLER_DRIVER_ERROR\n"); break;
    610610
    611         case 0x00000139:
     611        case 0x00000139: /* __fastfail(P1) triggers this via INT 29h(?) and P1 in rcx. */
    612612        {
    613613            const char *pszCheck;
     
    618618                case 0x02:  pszCheck = "Stack buffer overrun (via cookie)"; break;
    619619                case 0x03:  pszCheck = "Correupt LIST_ENTRY"; break;
    620                 case 0x04:  pszCheck = "Out of bounds stack pointer"; break;
     620                case 0x04:  pszCheck = "Out of bounds stack pointer"; break; /* "Reserved" on learn.microsoft.com */
    621621                case 0x05:  pszCheck = "Invalid parameter (fatal)"; break;
    622622                case 0x06:  pszCheck = "Uninitialized stack cookie (by loader prior to Win8)"; break;
     
    625625                case 0x09:  pszCheck = "Direct RtlQueryRegistryValues w/o typechecking on untrusted hive"; break;
    626626                /* https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/bug-check---bug-check-0x139-kernel-security-check-failure
    627                    and !analyze -show differs on the following: */
    628                 case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e:
    629                 case 0x0f:  pszCheck = "Memory safety violation [?]"; break;
    630                 case 0x10:  pszCheck = "Invalid indirect call (indirect call guard) [?]"; break;
    631                 case 0x11:  pszCheck = "Invalid memory write (write guard) [?]"; break;
    632                 case 0x12:  pszCheck = "Invalid target context for fiber switch [?]"; break;
    633                 case 0x13:  pszCheck = "Invalid register context assignment"; break;
    634                 case 0x14:  pszCheck = "Invalid object reference count"; break;
    635                 case 0x15: case 0x16: case 0x17:
    636                 case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e:
    637                 case 0x1f:  pszCheck = "Memory safety violation"; break;
    638                 case 0x18:  pszCheck = "Invalid jmp_buf"; break;
    639                 case 0x19:  pszCheck = "Modifying read-only data"; break;
    640                 case 0x20:  pszCheck = "Crypto self-test fail"; break;
    641                 case 0x21:  pszCheck = "Invalid exception chain"; break;
    642                 case 0x22:  pszCheck = "Crypto library error"; break;
    643                 /** @todo there are lots more... */
     627                   and !analyze -show differs on the following.  Looks like a decimal/hex mixup.
     628                   Using the web info, hoping it is more accurate (matches 0x1d better)... */
     629                case 0x0a:  pszCheck = "Invalid indirect control transfer (call guard)"; break;
     630                case 0x0b:  pszCheck = "Invalid memory write (write guard)"; break;
     631                case 0x0c:  pszCheck = "Invalid context for fiber switch"; break;
     632                case 0x0d:  pszCheck = "Invalid register context (in assignment)"; break;
     633                case 0x0e:  pszCheck = "Invalid object reference count"; break;
     634
     635                case 0x0f:  pszCheck = "Memory safety violation [?]"; break;       /* windbg; undocument on learn.microsoft.com */
     636                case 0x10:  pszCheck = "Invalid indirect call (call guard) [?]"; break;      /* ditto */
     637                case 0x11:  pszCheck = "Invalid memory write (write guard) [?]"; break;      /* ditto */
     638
     639                case 0x12:  pszCheck = "Invalid jmp_buf;"; break;
     640                case 0x13:  pszCheck = "Modifying read-only data"; break;
     641                case 0x14:  pszCheck = "Crypto self-test fail"; break;
     642                case 0x15:  pszCheck = "Invalid exception chain"; break;
     643                case 0x16:  pszCheck = "Crypto library error"; break;
     644                case 0x17:  pszCheck = "Invalid call from within DllMain"; break; /* sounds very userlandish... */
     645                case 0x18:  pszCheck = "Invalid image base address"; break;
     646                case 0x19:  pszCheck = "Problem protecting delay load import."; break;
     647                case 0x1a:  pszCheck = "Call to unsafe extension"; break;
     648                case 0x1b:  pszCheck = "Deprecated service call"; break;
     649                case 0x1c:  pszCheck = "Out of bounce buffer access"; break;
     650                case 0x1d:  pszCheck = "Corrupt RTL_BALANCED_NODE (often heap related)"; break;
     651
     652                case 0x23:  pszCheck = "RtlpHpAllocWithExceptionProtection/RtlpHpFreeWithExceptionProtection problem"; break; /* disas */
     653
     654                case 0x25:  pszCheck = "Out of bound jump table (switch) attempt"; break;
     655                case 0x26:  pszCheck = "Bogus longjmp target"; break;
     656                case 0x27:  pszCheck = "Invalid call target (export suppressed; RtlUnwindEx,RtlDispatchException)"; break;
     657
     658                case 0x32:  pszCheck = "RtlpHpFixedVsFree problem"; break; /* disas */
     659
    644660                default:    pszCheck = "Todo/Unknown"; break;
    645661            }
     
    653669        }
    654670
    655         case 0x0000013a: cchUsed = RTStrPrintf(pszDetails, cbDetails, "KERNEL_MODE_HEAP_CORRUPTION\n"); break;
     671        case 0x0000013a:
     672        {
     673            const char *pszCheck;
     674            switch (uP1)
     675            {
     676                case 0x03: pszCheck = "a corrupt entry header"; break;
     677                case 0x04: pszCheck = "multiple corrupt entry headers"; break;
     678                case 0x05: pszCheck = "a corrupt entry header for a large allocation"; break;
     679                case 0x06: pszCheck = "buffer overrun (possibly)"; break;
     680                case 0x07: pszCheck = "buffer underrun (possibly)"; break;
     681                case 0x08: pszCheck = "block is not busy - it is free"; break; /* same as 0xf? */
     682                case 0x09: pszCheck = "invalid argument"; break;
     683                case 0x0a: pszCheck = "invalid allocation type"; break;
     684                case 0x0b: pszCheck = "use after free (possibly)"; break;
     685                case 0x0c: pszCheck = "wrong heap given"; break;
     686                case 0x0d: pszCheck = "free list corruption"; break;
     687                case 0x0e: pszCheck = "non-free list corruption"; break;
     688                case 0x0f: pszCheck = "block is not busy - it is free"; break; /* same as 0x8? */
     689                case 0x10: pszCheck = "bogus state due to buffer overrun (possibly)"; break;
     690                case 0x11: pszCheck = "bogus state due to buffer overrun (possibly)"; break;
     691                case 0x12: pszCheck = "bogus state due to buffer overrun (possibly)"; break;
     692                case 0x13: pszCheck = "NULL heap handle"; break;
     693                case 0x14: pszCheck = "request too big"; break;
     694                case 0x15: pszCheck = "commit limit exceeded"; break;
     695                case 0x16: pszCheck = "invalid VA manage query size/whatever"; break;
     696            }
     697
     698            cchUsed = RTStrPrintf(pszDetails, cbDetails,
     699                                  "KERNEL_MODE_HEAP_CORRUPTION\n"
     700                                  "P1: %016RX64 - %s!\n"
     701                                  "P2: %016RX64 - Heap address\n"
     702                                  "P3: %016RX64 - Corruption address\n"
     703                                  "P4: %016RX64 - reserved\n", uP1, pszCheck, uP2, uP3, uP4);
     704            break;
     705        }
    656706        case 0x0000013b: cchUsed = RTStrPrintf(pszDetails, cbDetails, "PASSIVE_INTERRUPT_ERROR\n"); break;
    657707        case 0x0000013c: cchUsed = RTStrPrintf(pszDetails, cbDetails, "INVALID_IO_BOOST_STATE\n"); break;
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette