We're experiencing a BSOD on win8.1, so far only seen on 32-bit installs, and only after WHCK NVMe IO Test has been run. Our NVMe driver is a storport miniport, and we've had some successful WHCK runs on x64 systems, but the 32-bit always goes into a state where it will BSOD on every boot after this test is run.
If I do a clean OS install and replicate the verifier setup (flags 0x209bb on ournvme.sys and wdf01000.sys), there is no problem. We only see the problem after the WHCK test has run.
The bugcheck code is 0xD5 (DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL), and my driver hasn't done any Free operations when it fails.
I understand the concept: something has freed memory and then tried to use it, but having logged all my driver's alloc/free operations I don't *think* it's my fault.
Analysis as follows, but I'm at a loss where to look next. Has anyone seen this before?
BugCheck D5, {a4948f38, 0, 8206a1ad, 0}
Probably caused by : CLASSPNP.SYS ( CLASSPNP!SqmLogForwardProgress+101 )
Followup: MachineOwner
nt!RtlpBreakWithStatusInstruction:
815111f4 cc int 3
5: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL (d5)
Memory was referenced after it was freed.
This cannot be protected by try-except.
When possible, the guilty driver's name (Unicode string) is printed on
the bugcheck screen and saved in KiBugCheckDriver.
Arguments:
Arg1: a4948f38, memory referenced
Arg2: 00000000, value 0 = read operation, 1 = write operation
Arg3: 8206a1ad, if non-zero, the address which referenced memory.
Arg4: 00000000, (reserved)
Debugging Details:
READ_ADDRESS: a4948f38 Special pool
FAULTING_IP:
CLASSPNP!SqmLogForwardProgress+101
8206a1ad 8b4118 mov eax,dword ptr [ecx+18h]
MM_INTERNAL_CODE: 0
IMAGE_NAME: CLASSPNP.SYS
DEBUG_FLR_IMAGE_TIMESTAMP: 5215707d
MODULE_NAME: CLASSPNP
FAULTING_MODULE: 8202f000 CLASSPNP
DEFAULT_BUCKET_ID: WIN8_DRIVER_FAULT
BUGCHECK_STR: 0xD5
PROCESS_NAME: System
CURRENT_IRQL: 0
ANALYSIS_VERSION: 6.3.9600.17237 (debuggers(dbg).140716-0327) amd64fre
TRAP_FRAME: 88fe7ac0 -- (.trap 0xffffffff88fe7ac0)
ErrCode = 00000000
eax=00000000 ebx=897fa478 ecx=a4948f20 edx=00000000 esi=00000000 edi=897fa530
eip=8206a1ad esp=88fe7b34 ebp=88fe7ba0 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246
CLASSPNP!SqmLogForwardProgress+0x101:
8206a1ad 8b4118 mov eax,dword ptr [ecx+18h] ds:0023:a4948f38=????????
Resetting default scope
LAST_CONTROL_TRANSFER: from 8158d59d to 815111f4
STACK_TEXT:
88fe74dc 8158d59d 00000003 4bc33844 00000065 nt!RtlpBreakWithStatusInstruction
88fe7530 8158d0b7 8643f340 88fe792c 88fe7998 nt!KiBugCheckDebugBreak+0x1f
88fe7900 8150fdc6 00000050 a4948f38 00000000 nt!KeBugCheck2+0x676
88fe7924 8150fcfd 00000050 a4948f38 00000000 nt!KiBugCheck2+0xc6
88fe7944 8153873b 00000050 a4948f38 00000000 nt!KeBugCheckEx+0x19
88fe7998 8148110c 88fe7ac0 00001607 88fe7a18 nt! ?? ::FNODOBFM::`string'+0xf095
88fe7a28 815242e5 00000000 a4948f38 00000000 nt!MmAccessFault+0x6bc
88fe7a28 8206a1ad 00000000 a4948f38 00000000 nt!KiTrap0E+0xf1
88fe7ba0 8145fc46 897fa478 a49fcfd0 8145fbde CLASSPNP!SqmLogForwardProgress+0x101
88fe7be4 8145f4c9 a49fcfd0 00000000 88d7fbc0 nt!IopProcessWorkItem+0x68
88fe7c30 814be6a8 00000000 4bc33104 00000000 nt!ExpWorkerThread+0xff
88fe7c70 81525701 8145f3ca 00000000 00000000 nt!PspSystemThreadStartup+0x58
88fe7c7c 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x15
STACK_COMMAND: kb
FOLLOWUP_IP:
CLASSPNP!SqmLogForwardProgress+101
8206a1ad 8b4118 mov eax,dword ptr [ecx+18h]
SYMBOL_STACK_INDEX: 8
SYMBOL_NAME: CLASSPNP!SqmLogForwardProgress+101
FOLLOWUP_NAME: MachineOwner
BUCKET_ID_FUNC_OFFSET: 101
FAILURE_BUCKET_ID: 0xD5_VRF_CLASSPNP!SqmLogForwardProgress
BUCKET_ID: 0xD5_VRF_CLASSPNP!SqmLogForwardProgress
ANALYSIS_SOURCE: KM
FAILURE_ID_HASH_STRING: km:0xd5_vrf_classpnp!sqmlogforwardprogress
FAILURE_ID_HASH: {4856134c-7868-20c6-1221-0cbd1784ad34}
Followup: MachineOwner
5: kd> !pte a4948f38
VA a4948f38
PDE at C0602920 PTE at C0524A40
contains 000000003381D863 contains 0000160700000000
pfn 3381d ---DA--KWEV not valid
PageFile: 0
Offset: 1607
Protect: 0
5: kd> !pte a4947fff
VA a4947fff
PDE at C0602920 PTE at C0524A38
contains 000000003381D863 contains 0000160700000000
pfn 3381d ---DA--KWEV not valid
PageFile: 0
Offset: 1607
Protect: 0
5: kd> !pool a4948f38
Pool page a4948f38 region is Special pool
Address a4948000 does not belong to any pool
a4948000: Unable to get contents of special pool block
5: kd> !pool a4948000
Pool page a4948000 region is Special pool
Address a4948000 does not belong to any pool
a4948000: Unable to get contents of special pool block
5: kd> !pool a4948000-1000
Pool page a4947000 region is Special pool
Address a4947000 does not belong to any pool
a4947000: Unable to get contents of special pool block
5: kd> !pool a4948000-2000
Pool page a4946000 region is Special pool
Address a4946000 does not belong to any pool
*a4946000 size: 24 data: a4946fd8 (NonPaged) *Io
Pooltag Io : general IO allocations, Binary : nt!io