I am writing a mini filter driver.
Earlier I was not using Exclusive locks with CcFlushCache and MmFlushImageSection(with write flag) so Whenever this was called, crash was generating with:
IRQL_NOT_LESS_OR_EQUAL
SYSTEM_THREAD_EXCEPTION_NOT_HANDLED(with access denied)
After that I tried to use Resource and Paging Resource lock from FxContext.
But When ExAcquireResourceAcquireLite() is called then I am getting same bug check as above.
I checked in my function that irql is 0. But when crash is generated with IRQL_NOT_LESS_OR_EQUAL after that irql is 2.
In SYSTEM_THREAD_EXCEPTION_NOT_HANDLED bug check irql is still 0.
I am not getting what to do ? why I am getting crash on this ?
::::::::::::::::::::SYSTEM_THREAD_EXCEPTIO_NOT_HANDLED:::::::::::::::::::::::::::
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
SYSTEM_THREAD_EXCEPTION_NOT_HANDLED (7e)
This is a very common bugcheck. Usually the exception address pinpoints
the driver/function that caused the problem. Always note this address
as well as the link date of the driver/image that contains this address.
Arguments:
Arg1: ffffffffc0000005, The exception code that was not handled
Arg2: fffff8025c0ddc1c, The address that the exception occurred at
Arg3: ffffd00099f16288, Exception Record Address
Arg4: ffffd00099f15a90, Context Record Address
Debugging Details:
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.
FAULTING_IP:
nt!KxWaitForLockOwnerShipWithIrql+14
fffff802`5c0ddc1c 48890a mov qword ptr [rdx],rcx
EXCEPTION_RECORD: ffffd00099f16288 – (.exr 0xffffd00099f16288)
ExceptionAddress: fffff8025c0ddc1c (nt!KxWaitForLockOwnerShipWithIrql+0x0000000000000014)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 0000000000000001
Parameter[1]: 000000000007d3e4
Attempt to write to address 000000000007d3e4
CONTEXT: ffffd00099f15a90 – (.cxr 0xffffd00099f15a90;r)
rax=0000000000000000 rbx=0000000000000000 rcx=ffffd00099f16510
rdx=000000000007d3e4 rsi=ffffe001b3692040 rdi=ffffd00099f16510
rip=fffff8025c0ddc1c rsp=ffffd00099f164c0 rbp=0000000000000001
r8=ffffd00099f16560 r9=ffffe001b3692788 r10=0000000000000000
r11=ffffe001b3692788 r12=0000000000000000 r13=0000000000000000
r14=0000000000010001 r15=0000000000000000
iopl=0 nv up di pl zr na po nc
cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00010046
nt!KxWaitForLockOwnerShipWithIrql+0x14:
fffff8025c0ddc1c 48890a mov qword ptr [rdx],rcx ds:002b:00000000
0007d3e4=???
Last set context:
rax=0000000000000000 rbx=0000000000000000 rcx=ffffd00099f16510
rdx=000000000007d3e4 rsi=ffffe001b3692040 rdi=ffffd00099f16510
rip=fffff8025c0ddc1c rsp=ffffd00099f164c0 rbp=0000000000000001
r8=ffffd00099f16560 r9=ffffe001b3692788 r10=0000000000000000
r11=ffffe001b3692788 r12=0000000000000000 r13=0000000000000000
r14=0000000000010001 r15=0000000000000000
iopl=0 nv up di pl zr na po nc
cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00010046
nt!KxWaitForLockOwnerShipWithIrql+0x14:
fffff8025c0ddc1c 48890a mov qword ptr [rdx],rcx ds:002b:00000000
0007d3e4=???
Resetting default scope
DEFAULT_BUCKET_ID: WIN8_DRIVER_FAULT
PROCESS_NAME: System
CURRENT_IRQL: 0
ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s.
EXCEPTION_PARAMETER1: 0000000000000001
EXCEPTION_PARAMETER2: 000000000007d3e4
WRITE_ADDRESS: 000000000007d3e4 Paged pool
FOLLOWUP_IP:
vmmgmt!vm_rdwr_lock+52 [c:\work\6.0_beta\p\fspem\inc\arch_windows.h @ 333]
fffff801`8dc4ea72 0fb6c0 movzx eax,al
BUGCHECK_STR: AV
ANALYSIS_VERSION: 6.3.9600.16384 (debuggers(dbg).130821-1623) amd64fre
LAST_CONTROL_TRANSFER: from fffff8025c0a5a6c to fffff8025c0ddc1c
STACK_TEXT:
ffffd00099f164c0 fffff802
5c0a5a6c : ffffe001b5fe34c0 fffff801
8d2aad51 fffffa8000000000 ffffe001
b3692001 : nt!KxWaitForLockOwnerShipWithIrql+0x14
ffffd00099f164f0 fffff802
5c68b6b9 : ffffe001b3692002 ffffe001
b3692040 0000000000000080 ffffe001
b5fe34c0 : nt!ExAcquireResourceExclusiveLite+0x21c
ffffd00099f16560 fffff801
8dc4ea72 : ffffe001b3692040 ffffcf80
82fbaff0 0000000000000010 00000000
00010282 : nt!VerifierExAcquireResourceExclusiveLite+0x35
ffffd00099f165a0 fffff801
8dceb8db : ffffe001b5fe34c0 ffffe001
00000001 ffffe00100000001 fffff801
00000001 : vmmgmt!vm_rdwr_lock+0x52 [c:\work\6.0_beta\p\fspem\inc\arch_windows.h @ 333]
ffffd00099f165d0 fffff801
8dc4b4fd : ffffe001b5fe3538 ffffc001
6d05e720 0000000000000000 fffff801
00000001 : vmmgmt!PurgeFile+0x7b [c:\work\6.0_beta\p\fspem\vss\windows\lib\srvc\vsfile.cpp @ 840]
ffffd00099f16620 fffff801
8dc3b0dd : ffffe001b39fe070 ffffcf80
8344aec0 0000000000000000 ffffd000
00000001 : vmmgmt!VmOpenedFiles+0x73d [c:\work\6.0_beta\p\fspem\vss\windows\drv\src\vmopenedfiles.cpp @ 334]
ffffd00099f16720 fffff801
8dc3a7ec : ffffe001b39fe070 ffffe001
b62bf044 0000000000000001 ffffd000
99f167f8 : vmmgmt!VmProtectVolumeDir+0x54d [c:\work\6.0_beta\p\fspem\vss\windows\drv\src\vmguard.cpp @ 269]
ffffd00099f167b0 fffff801
8dc3df42 : ffffe001b62bf044 fffff801
00000000 ffffe00100000000 00000000
00000000 : vmmgmt!VmProtectDirectory+0x2dc [c:\work\6.0_beta\p\fspem\vss\windows\drv\src\vmguard.cpp @ 488]
ffffd00099f16830 fffff801
8dc567b5 : ffffe001b62bf044 ffffcf80
00001000 0000000000000000 ffffd000
00000001 : vmmgmt!VmGuardList+0x192 [c:\work\6.0_beta\p\fspem\vss\windows\drv\src\vmguardlist.cpp @ 140]
ffffd00099f16890 fffff801
8dc80a23 : ffffe001b62bf030 ffffcf80
00000000 fffff8018dd149d0 ffffcf80
83300fe0 : vmmgmt!vm_guard_cfg+0xc5 [c:\work\6.0_beta\p\fspem\vmcore\cfg\vm_win_syscfg.c @ 120]
ffffd00099f16910 fffff801
8dc81a23 : ffffcf8000000003 ffffd000
99f16b40 fffff80100000000 ffffe001
b591a3d0 : vmmgmt!vm_do_ussd_cmd+0xd43 [c:\work\6.0_beta\p\fspem\vmcore\cfg\vm_cfg_upd.c @ 1293]
ffffd00099f16ab0 fffff802
5c0db794 : ffffcf805c178fc0 0b0b0b0b
0b0b0b0b 0b0b0b0b0b0b0b0b 0b0b0b0b
0b0b0b0b : vmmgmt!vm_guardupdate_thread+0xcf3 [c:\work\6.0_beta\p\fspem\vmcore\cfg\vm_cfg_upd.c @ 2036]
ffffd00099f16c00 fffff802
5c1665c6 : ffffd00099567180 ffffe001
b3692040 ffffd000995732c0 0b0b0b0b
0b0b0b0b : nt!PspSystemThreadStartup+0x58
ffffd00099f16c60 00000000
00000000 : ffffd00099f17000 ffffd000
99f11000 0000000000000000 00000000
00000000 : nt!KiStartSystemThread+0x16
FAULTING_SOURCE_LINE: c:\work\6.0_beta\p\fspem\inc\arch_windows.h
FAULTING_SOURCE_FILE: c:\work\6.0_beta\p\fspem\inc\arch_windows.h
FAULTING_SOURCE_LINE_NUMBER: 333
FAULTING_SOURCE_CODE:
329: }
330: if(writeaccess == 0){
331: return ExAcquireResourceSharedLite(rwlock, (BOOLEAN) wait);
332: }else{
333: return ExAcquireResourceExclusiveLite(rwlock, (BOOLEAN) wait);
334: }
335: }
336: static void vm_rdwr_unlock(vm_rdwr_t* rwlock, int critical, u_int64_t thread){
337: if(thread){
338: ExReleaseResourceForThreadLite(rwlock, (ERESOURCE_THREAD) thread);
SYMBOL_STACK_INDEX: 3
SYMBOL_NAME: vmmgmt!vm_rdwr_lock+52
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: vmmgmt
IMAGE_NAME: vmmgmt.sys
DEBUG_FLR_IMAGE_TIMESTAMP: 5433dbc9
STACK_COMMAND: .cxr 0xffffd00099f15a90 ; kb
BUCKET_ID_FUNC_OFFSET: 52
FAILURE_BUCKET_ID: AV_VRF_vmmgmt!vm_rdwr_lock
BUCKET_ID: AV_VRF_vmmgmt!vm_rdwr_lock
ANALYSIS_SOURCE: KM
FAILURE_ID_HASH_STRING: km:av_vrf_vmmgmt!vm_rdwr_lock
FAILURE_ID_HASH: {62c43094-d81d-5e36-ec76-670c6adf0533}
Followup: MachineOwner
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
::::::::::::::::::::IRQL_NOT_LESS_OR_EQUAL::::::::::::::::::::::::::::::::::::::::::::::
IRQL_NOT_LESS_OR_EQUAL (a)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high. This is usually
caused by drivers using improper addresses.
If a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: 00000000c00d0001, memory referenced
Arg2: 0000000000000002, IRQL
Arg3: 0000000000000001, bitfield :
bit 0 : value 0 = read operation, 1 = write operation
bit 3 : value 0 = not an execute operation, 1 = execute operation (only on chips which support this level of status)
Arg4: fffff8021fece9f9, address which referenced memory
Debugging Details:
WRITE_ADDRESS: 00000000c00d0001 Paged pool
CURRENT_IRQL: 2
FAULTING_IP:
nt!ExpWaitForResource+1c9
fffff802`1fece9f9 f00fba2e07 lock bts dword ptr [rsi],7
DEFAULT_BUCKET_ID: WIN8_DRIVER_FAULT
BUGCHECK_STR: AV
PROCESS_NAME: System
ANALYSIS_VERSION: 6.3.9600.16384 (debuggers(dbg).130821-1623) amd64fre
TRAP_FRAME: ffffd000c0d5b2a0 – (.trap 0xffffd000c0d5b2a0)
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=000000000002c0ef rbx=0000000000000000 rcx=0000000690fe958f
rdx=ffffd000c0d5b3e0 rsi=0000000000000000 rdi=0000000000000000
rip=fffff8021fece9f9 rsp=ffffd000c0d5b430 rbp=0000000000000001
r8=0000000000000000 r9=fffff780000003b0 r10=fffff78000000008
r11=ffffd000c0d5b400 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei pl zr na po nc
nt!ExpWaitForResource+0x1c9:
fffff8021fece9f9 f00fba2e07 lock bts dword ptr [rsi],7 ds:00000000
00000000=???
Resetting default scope
LAST_CONTROL_TRANSFER: from fffff80220053a46 to fffff8021ffd0b90
STACK_TEXT:
ffffd000c0d5a9a8 fffff802
20053a46 : 0000000000000000 00000000
00000000 ffffd000c0d5ab10 fffff802
1fec08cc : nt!DbgBreakPointWithStatus
ffffd000c0d5a9b0 fffff802
20053357 : 0000000000000003 ffffd000
c0d5ab10 fffff8021ffd7f80 00000000
0000000a : nt!KiBugCheckDebugBreak+0x12
ffffd000c0d5aa10 fffff802
1ffca0a4 : ffffe00172bff880 fffff802
1ff1f858 0000000000000000 00000000
00000000 : nt!KeBugCheck2+0x8ab
ffffd000c0d5b120 fffff802
1ffd5ae9 : 000000000000000a 00000000
c00d0001 0000000000000002 00000000
00000001 : nt!KeBugCheckEx+0x104
ffffd000c0d5b160 fffff802
1ffd433a : 0000000000000001 ffffe001
72bff880 ffff232091ec9500 ffffd000
c0d5b2a0 : nt!KiBugCheckDispatch+0x69
ffffd000c0d5b2a0 fffff802
1fece9f9 : ffffd000c0d5b401 ffffe001
74bddc60 0000000000000001 00000000
c00d0001 : nt!KiPageFault+0x23a
ffffd000c0d5b430 fffff802
1ff0fa2e : ffffe00174bddc60 00000000
c00d0001 fffffa8000000000 ffffe001
00000002 : nt!ExpWaitForResource+0x1c9
ffffd000c0d5b4f0 fffff802
204f56b9 : ffffe00172bff802 ffffe001
72bff880 0000000000000080 ffffe001
74bddc60 : nt!ExAcquireResourceExclusiveLite+0x1de
ffffd000c0d5b560 fffff800
7647ea72 : ffffe00172bff880 ffffcf81
4fa1aff0 0000000000000010 00000000
00010282 : nt!VerifierExAcquireResourceExclusiveLite+0x35
ffffd000c0d5b5a0 fffff800
7651b8d2 : ffffe00174bddc60 ffffe001
00000001 ffffe00100000001 fffff800
00000001 : vmmgmt!vm_rdwr_lock+0x52 [c:\work\6.0_beta\p\fspem\inc\arch_windows.h @ 333]
ffffd000c0d5b5d0 fffff800
7647b4fd : ffffe00174bddcd8 ffffc001
d0a13720 0000000000000000 fffff800
00000001 : vmmgmt!PurgeFile+0x72 [c:\work\6.0_beta\p\fspem\vss\windows\lib\srvc\vsfile.cpp @ 839]
ffffd000c0d5b620 fffff800
7646b0dd : ffffe001731ff070 ffffcf81
4df20ec0 0000000000000000 ffffd000
00000001 : vmmgmt!VmOpenedFiles+0x73d [c:\work\6.0_beta\p\fspem\vss\windows\drv\src\vmopenedfiles.cpp @ 334]
ffffd000c0d5b720 fffff800
7646a7ec : ffffe001731ff070 ffffe001
75c36044 0000000000000001 ffffd000
c0d5b7f8 : vmmgmt!VmProtectVolumeDir+0x54d [c:\work\6.0_beta\p\fspem\vss\windows\drv\src\vmguard.cpp @ 269]
ffffd000c0d5b7b0 fffff800
7646df42 : ffffe00175c36044 fffff800
00000000 ffffe00100000000 00000000
00000000 : vmmgmt!VmProtectDirectory+0x2dc [c:\work\6.0_beta\p\fspem\vss\windows\drv\src\vmguard.cpp @ 488]
ffffd000c0d5b830 fffff800
764867b5 : ffffe00175c36044 ffffcf81
00001000 0000000000000000 ffffd000
00000001 : vmmgmt!VmGuardList+0x192 [c:\work\6.0_beta\p\fspem\vss\windows\drv\src\vmguardlist.cpp @ 140]
ffffd000c0d5b890 fffff800
764b0a23 : ffffe00175c36030 ffffcf81
00000000 fffff800765449d0 ffffe001
759fa550 : vmmgmt!vm_guard_cfg+0xc5 [c:\work\6.0_beta\p\fspem\vmcore\cfg\vm_win_syscfg.c @ 120]
ffffd000c0d5b910 fffff800
764b1a23 : ffffe00100000003 ffffd000
c0d5bb40 fffff80000000000 ffffcf81
71b4afe0 : vmmgmt!vm_do_ussd_cmd+0xd43 [c:\work\6.0_beta\p\fspem\vmcore\cfg\vm_cfg_upd.c @ 1293]
ffffd000c0d5bab0 fffff802
1ff45794 : ffffcf814bd78fc0 ffffe000
a49e8c00 ffffe000a49e8c10 ffffe000
a49e8c10 : vmmgmt!vm_guardupdate_thread+0xcf3 [c:\work\6.0_beta\p\fspem\vmcore\cfg\vm_cfg_upd.c @ 2036]
ffffd000c0d5bc00 fffff802
1ffd05c6 : ffffd000c0367180 ffffe001
72bff880 ffffd000c03732c0 ffffe000
a49e8c70 : nt!PspSystemThreadStartup+0x58
ffffd000c0d5bc60 00000000
00000000 : ffffd000c0d5c000 ffffd000
c0d56000 0000000000000000 00000000
00000000 : nt!KiStartSystemThread+0x16
STACK_COMMAND: kb
FOLLOWUP_IP:
vmmgmt!vm_rdwr_lock+52 [c:\work\6.0_beta\p\fspem\inc\arch_windows.h @ 333]
fffff800`7647ea72 0fb6c0 movzx eax,al
FAULTING_SOURCE_LINE: c:\work\6.0_beta\p\fspem\inc\arch_windows.h
FAULTING_SOURCE_FILE: c:\work\6.0_beta\p\fspem\inc\arch_windows.h
FAULTING_SOURCE_LINE_NUMBER: 333
FAULTING_SOURCE_CODE:
329: }
330: if(writeaccess == 0){
331: return ExAcquireResourceSharedLite(rwlock, (BOOLEAN) wait);
332: }else{
333: return ExAcquireResourceExclusiveLite(rwlock, (BOOLEAN) wait);
334: }
335: }
336: static void vm_rdwr_unlock(vm_rdwr_t* rwlock, int critical, u_int64_t thread){
337: if(thread){
338: ExReleaseResourceForThreadLite(rwlock, (ERESOURCE_THREAD) thread);
SYMBOL_STACK_INDEX: 9
SYMBOL_NAME: vmmgmt!vm_rdwr_lock+52
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: vmmgmt
IMAGE_NAME: vmmgmt.sys
DEBUG_FLR_IMAGE_TIMESTAMP: 5433c060
BUCKET_ID_FUNC_OFFSET: 52
FAILURE_BUCKET_ID: AV_VRF_vmmgmt!vm_rdwr_lock
BUCKET_ID: AV_VRF_vmmgmt!vm_rdwr_lock
ANALYSIS_SOURCE: KM
FAILURE_ID_HASH_STRING: km:av_vrf_vmmgmt!vm_rdwr_lock
FAILURE_ID_HASH: {62c43094-d81d-5e36-ec76-670c6adf0533}
Followup: MachineOwner
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Thanks
Ankit