CLOCK_WATCHDOG_TIMEOUT (101)
This indicates that an expected clock interrupt on a secondary processor, in a multi-processor system, was not received within the allocated interval.
So there's the basic definition of this particular bug check. Let's get into the debugging now.
Code:
BugCheck 101, {[COLOR=#ff0000][I][U][B]19[/B][/U][/I][/COLOR], 0, [COLOR=#ff0000][I][U][B]fffff880036a5180[/B][/U][/I][/COLOR], [COLOR=#ff0000][I][U][B]5[/B][/U][/I][/COLOR]}
^^ 19 clock ticks in regards to the timeout.
fffff880036a5180 is the PRCB address of the hung processor, let's keep this address in mind.
Code:
0: kd> !prcb 5
PRCB for Processor 5 at [COLOR=#ff0000]fffff880036a5180[/COLOR]:
Current IRQL -- 0
Threads-- Current fffffa8013055b50 Next fffffa80123fe8b0 Idle fffff880036b00c0
Processor Index 5 Number (0, 5) GroupSetMember 20
Interrupt Count -- 041ea28a
Times -- Dpc 0000006b Interrupt 000001b0
Kernel 001a2603 User 00024425
For reference, I did not do !prcb 0 through 5. That would have been very tedious. Instead, you can use
!running -it. The "i" argument causes it to display idle processors too, and "t" displays the stack trace for the thread running on each processor. If we run that extension, it shows the is an
8 core box.
Hint: At times, the 4th parameter of the bug check will show you the responsible processor. For example, in your *101 here, it was correct as the 4th parameter was 5.
Hint #2: You can also generally tell the amount of cores on the box by checking the bugcheck_string - BUGCHECK_STR: CLOCK_WATCHDOG_TIMEOUT_8_PROC
As this matches the 3rd parameter of the bug check, processor #5 is the responsible processor. Now with the information we have here thus far, we know that processor #5 reached 19 clock ticks without responding, therefore the system crashed. Before we go further, what is a clock tick? A clock interrupt is a form of interrupt which involves counting the the cycles of the processor core, which is running a clock on the processors to keep them all in sync. A clock interrupt is handed out to all processors and then they must report in, and when one doesn't report in, you then crash.
Let's now look at the stacks of the different processors to see what the threads were involved in:
We can use
knL and go through a grueling method of obtaining the trap frame, but we don't like having to put in more work, so let's use
kv instead on Processor 0:
Code:
0: kd> kv
Child-SP RetAddr : Args to Child : Call Site
fffff880`009a9628 fffff800`050d4a4a : 00000000`00000101 00000000`00000019 00000000`00000000 fffff880`036a5180 : nt!KeBugCheckEx
fffff880`009a9630 fffff800`050876f7 : 00000000`00000000 fffff800`00000005 00000000`00002710 fffff880`009a9628 : nt! ?? ::FNODOBFM::`string'+0x4e3e
fffff880`009a96c0 fffff800`055f7895 : fffff800`0561d460 fffff880`009a9870 fffff800`0561d460 00000000`00000000 : nt!KeUpdateSystemTime+0x377
fffff880`009a97c0 fffff800`0507a113 : 00000000`763d1536 00000000`00000000 00000000`00000000 00000000`00000000 : hal!HalpHpetClockInterrupt+0x8d
fffff880`009a97f0 fffff800`050b34bd : 00000000`00000000 00000000`00000000 00000000`00000000 fffffa80`0c5ea618 : nt!KiInterruptDispatchNoLock+0x163 (TrapFrame @ [COLOR=#ff0000]fffff880`009a97f0[/COLOR])
fffff880`009a9980 fffff800`05082a1c : 00000000`00000000 fffff880`009a9ab8 00000000`00000000 00000000`00000000 : nt!KxFlushEntireTb+0xcd
fffff880`009a99c0 fffff800`050406e9 : 00000000`00000008 00000000`0000007f fffffa80`0027cde0 00000000`00000080 : nt!KeFlushMultipleRangeTb+0x28c
fffff880`009a9a90 fffff800`05040f37 : ffffffff`ffffffff 00000000`0000007f 00000000`00000000 fffffa80`0c5e96f8 : nt!MiZeroPageChain+0x14e
fffff880`009a9ad0 fffff800`0531a2ea : fffffa80`0c7a3040 00000000`00000080 fffffa80`0c7a26f0 fffff800`0506e8d9 : nt!MmZeroPageThread+0x83a
fffff880`009a9c00 fffff800`0506e8e6 : fffff800`051f8e80 fffffa80`0c7a3040 fffff800`05206cc0 00000000`00000000 : nt!PspSystemThreadStartup+0x5a
fffff880`009a9c40 00000000`00000000 : fffff880`009aa000 fffff880`009a4000 fffff880`009a9870 00000000`00000000 : nt!KxStartSystemThread+0x16
Code:
0: kd> .trap fffff880`009a97f0
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=00000000031ed2b9 rbx=0000000000000000 rcx=fffff880009a9ab8
rdx=00000000000000fa rsi=0000000000000000 rdi=0000000000000000
[COLOR=#4b0082]rip=fffff800050b34bd[/COLOR] rsp=fffff880009a9980 rbp=0000000000000008
r8=fffff880009a9ac0 r9=0000000000000001 r10=0000000000000001
r11=0000000000000000 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei pl nz na po nc
[COLOR=#ff0000]nt!KxFlushEntireTb+0xcd[/COLOR]:
[COLOR=#006400]fffff800`050b34bd[/COLOR] a801 test al,1
Code:
0: kd> u @rip
nt!KxFlushEntireTb+0xcd:
fffff800`050b34bd a801 test al,1
fffff800`050b34bf 75e6 [COLOR=#ff0000]jne [/COLOR] [COLOR=#4b0082]nt!KxFlushEntireTb+0xb7[/COLOR] (fffff800`050b34a7)
fffff800`050b34c1 f00fba2db6e6140000 lock bts dword ptr [nt!KiTbFlushTimeStamp (fffff800`05201b80)],0
fffff800`050b34ca 0f834bffffff jae [COLOR=#4b0082]nt!KxFlushEntireTb+0x2b[/COLOR] (fffff800`050b341b)
fffff800`050b34d0 ebd5 [COLOR=#ff0000]jmp[/COLOR] n[COLOR=#4b0082]t!KxFlushEntireTb+0xb7[/COLOR] (fffff800`050b34a7)
fffff800`050b34d2 90 nop
fffff800`050b34d3 90 nop
fffff800`050b34d4 90 nop
^^ Disassembling the first few instructions reveals a jump (jmp) that is back up in the
nt!KxFlushEntireTb function.
So, what's the summary so far? Processor #0 was the thread that created the bugcheck itself, and must have been interrupted by a clock interrupt in order to trigger the CLOCK_WATCHDOG_TIMEOUT bug check.
Let's take a look into Processor #1's call stack like we did Processor #0:
Code:
1: kd> kv
Child-SP RetAddr : Args to Child : Call Site
fffff880`09b35d20 fffff800`0509d251 : 00000000`00000000 00000000`00000005 00000000`00000001 fffffa80`185ce970 : nt!KeFlushMultipleRangeTb+0x260
fffff880`09b35df0 fffff800`051aeb5e : 00000000`00000005 fffff880`09b35f40 fffff6fd`400be480 fffffa80`185ce970 : nt!MiFlushTbAsNeeded+0x1d1
fffff880`09b35f00 fffff800`0509d9b0 : 00000000`00005000 fffff800`0520d580 00000000`00000000 fffff800`051ae514 : nt!MiAllocatePoolPages+0x4de
fffff880`09b36040 fffff800`051b243e : 00000000`00000000 00000000`00000000 fffffa80`00000000 00000000`00005000 : nt!ExpAllocateBigPool+0xb0
fffff880`09b36130 fffff880`019d9beb : fffff880`019e6964 00000000`00000000 00000000`6e4d7641 fffff8a0`00000000 : nt!ExAllocatePoolWithTag+0x82e
fffff880`09b36220 fffff880`019d9fb9 : 00000000`00000000 00000000`00000014 00000000`00000001 00000000`00000001 : aswMonFlt+0x1beb
fffff880`09b36270 fffff880`019f377a : 00000000`00000001 fffff880`09b36458 fffff8a0`16345be0 fffff880`00000001 : [COLOR=#ff0000]aswMonFlt+0x1fb9[/COLOR]
fffff880`09b362d0 fffff880`01004288 : 00000000`00000000 fffff880`09b36458 fffffa80`185ceda0 00000000`00000000 : [COLOR=#ff0000]aswMonFlt+0x1b77a[/COLOR]
fffff880`09b36410 fffff880`01002d1b : fffffa80`11755030 fffffa80`17b63bd0 fffffa80`132fe010 fffffa80`132fe230 : fltmgr!FltpPerformPostCallbacks+0x368
fffff880`09b364e0 fffff880`010222b9 : fffffa80`185ce970 fffffa80`11761010 fffffa80`185ce900 fffffa80`11762450 : fltmgr!FltpLegacyProcessingAfterPreCallbacksCompleted+0x39b
fffff880`09b36570 fffff800`0537d43c : 00000000`00000005 fffffa80`17a1caa8 fffffa80`0d05ea90 00000000`00000000 : fltmgr!FltpCreate+0x2a9
fffff880`09b36620 fffff800`05378db8 : fffffa80`10cc4cd0 fffff800`00000000 fffffa80`17a1c8f0 00000000`00000001 : nt!IopParseDevice+0x14d3
fffff880`09b36780 fffff800`05379fd6 : 00000000`00000000 fffffa80`17a1c8f0 00000000`c0000225 fffffa80`0c7b58e0 : nt!ObpLookupObjectName+0x588
fffff880`09b36870 fffff800`0537b8dc : 00000000`00000000 00000000`00000000 fffffa80`1900ba01 fffffa80`14ce30c0 : nt!ObOpenObjectByName+0x306
fffff880`09b36940 fffff800`05386ed4 : 00000000`0020eee8 fffff8a0`80100080 00000000`0020ef38 00000000`0020eef8 : nt!IopCreateFile+0x2bc
fffff880`09b369e0 fffff800`0507ce53 : 00000000`00000000 000007fe`f0122808 00000000`00000016 fffff880`09b36ae0 : nt!NtCreateFile+0x78
fffff880`09b36a70 00000000`77a0180a : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiSystemServiceCopyEnd+0x13 (TrapFrame @ fffff880`09b36ae0)
00000000`0020edb8 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x77a0180a
^^ avast! isn't playing nice (to no surprise).
Let's check Processor #2:
Code:
2: kd> kv
Child-SP RetAddr : Args to Child : Call Site
fffff880`0bbb8c90 fffff800`050b23cd : 00000000`00000000 00000000`00000001 ffffffff`ffffffff fffff800`051b1d0e : nt!KxFlushEntireTb+0xcd
fffff880`0bbb8cd0 fffff800`050d69b0 : 00000000`00000001 fffff680`00038b80 00000000`00000001 fffffa80`124164a8 : nt!KeFlushTb+0x119
fffff880`0bbb8d50 fffff800`0508a89d : fffffa80`0a2c1b30 fffff880`0bbb8e00 fffffa80`177abd40 00000000`00000000 : nt! ?? ::FNODOBFM::`string'+0xada2
fffff880`0bbb8d90 fffff800`0507bcee : 00000000`00000000 00000000`07170000 00000000`53646100 00000000`00000000 : nt!MmAccessFault+0xa7d
fffff880`0bbb8ef0 fffff800`0535de04 : fffff880`0bbb9b60 00000000`00000000 fffffa80`0d2e8070 fffff880`0bbb90d8 : nt!KiPageFault+0x16e (TrapFrame @ fffff880`0bbb8ef0)
fffff880`0bbb9080 fffff880`052f9aa9 : 00000000`00000001 00000000`000005f0 00000000`0951f0c0 00000000`00000000 : nt!NtQueryObject+0xa4
fffff880`0bbb9190 fffff880`053b83c3 : 00000000`00000000 00000000`82ac8004 00000000`0951f0c0 00000000`0000008c : aswSnx+0x2caa9
fffff880`0bbb9200 fffff880`052d07bc : 00000000`00c6b80a 00000000`00000000 fffffa80`177b8740 fffffa80`178c0128 : [COLOR=#ff0000]aswSnx+0xeb3c3[/COLOR]
fffff880`0bbb9880 fffff800`0539a3a7 : fffffa80`00000000 fffffa80`145c9c50 fffffa80`145c9c50 fffffa80`178c0010 : [COLOR=#ff0000]aswSnx+0x37bc[/COLOR]
fffff880`0bbb98d0 fffff800`0539ac06 : fffff880`0bbb9a01 00000000`00000000 00000000`00000001 00000000`00000000 : nt!IopXxxControlFile+0x607
fffff880`0bbb9a00 fffff800`0507ce53 : fffffa80`134b0b50 fffff880`0bbb9b60 fffff880`0bbb9b60 00000000`00000000 : nt!NtDeviceIoControlFile+0x56
fffff880`0bbb9a70 00000000`77a0132a : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiSystemServiceCopyEnd+0x13 (TrapFrame @ fffff880`0bbb9ae0)
00000000`0951e718 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x77a0132a
^^ More avast! not playing nice.
Let's check Processor #3:
Code:
3: kd> kv
Child-SP RetAddr : Args to Child : Call Site
fffff880`03041680 fffff800`05388d4f : 00000000`00000000 fffff880`03041b60 00000000`00000000 00001f80`00000200 : [COLOR=#ff0000]nt!KeFlushProcessWriteBuffers+0x6b[/COLOR]
fffff880`030416f0 fffff800`053893ad : 00000000`003fed10 fffff800`05373cce 00000000`00000000 fffff800`0507cd19 : nt!ExpQuerySystemInformation+0x13af
fffff880`03041aa0 fffff800`0507ce53 : 00000000`00000000 fffff880`03041b60 ffffffff`fffe7960 000007fe`fad80b48 : nt!NtQuerySystemInformation+0x4d
fffff880`03041ae0 00000000`77a0161a : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiSystemServiceCopyEnd+0x13 (TrapFrame @ fffff880`03041ae0)
00000000`011cf3e8 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x77a0161a
^^ On Proc #3, the
KeFlushProcessWriteBuffers function was called. This function generates an interprocessor interrupt (IPI) to all processors that are part of the current process affinity. It guarantees the visibility of write operations performed on one processor to the other processors.
Essentially, it flushes the write queue of each processor that is running a thread of the current process.
Let's check Processor #4:
Code:
4: kd> kv
Child-SP RetAddr : Args to Child : Call Site
fffff880`0c46e880 fffff800`050b23cd : 00000000`00000000 00000000`00000001 00000000`000007d3 00000000`00000001 : [COLOR=#ff0000]nt!KxFlushEntireTb+0x79[/COLOR]
fffff880`0c46e8c0 fffff800`050d69b0 : 00000000`00000002 fffff680`0005fc00 00000000`00000001 00000000`754e2450 : nt!KeFlushTb+0x119
fffff880`0c46e940 fffff800`0508a89d : fffffa80`0acf1a00 fffff880`0c46ea00 00000000`0409e310 00000000`00000000 : nt! ?? ::FNODOBFM::`string'+0xada2
fffff880`0c46e980 fffff800`0507bcee : 00000000`00000001 00000000`0bf80000 00000000`199e7401 00000000`00000040 : nt!MmAccessFault+0xa7d
fffff880`0c46eae0 00000000`5bb95c37 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiPageFault+0x16e (TrapFrame @ fffff880`0c46eae0)
00000000`037ce578 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x5bb95c37
^^ Similiar to Proc #1.
Let's now take a look at the problematic processor (#5):
Code:
5: kd> kv
Child-SP RetAddr : Args to Child : Call Site
fffff880`02eff418 fffff800`055f4ae7 : fffffa80`14cff150 fffff800`051b130d fffff800`0520b940 fffff800`050822e0 : hal!HalpLegacyApicReadGenericReg+0xd
fffff880`02eff420 fffff800`0506f7f3 : fffffa80`13055b50 fffffa80`177e8908 fffffa80`14cff290 00000000`00000140 : hal!HalRequestSoftwareInterrupt+0x58
fffff880`02eff450 fffff800`0505e6a4 : fffffa80`13055b50 00000000`00000001 00000000`00000000 fffffa80`177e8908 : nt!KiInsertQueueApc+0x243
fffff880`02eff480 fffff800`05092afc : fffffa80`177e8890 00000000`00000000 00000000`00000000 00000000`00000082 : nt!KeInsertQueueApc+0x80
fffff880`02eff4e0 fffff800`050705f7 : 00000000`00000000 00000000`00000000 3dcc2d58`20707200 00000000`00000000 : nt!IopCompleteRequest+0xb8c
fffff880`02eff5b0 fffff800`050737fd : fffffa80`13055b50 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiDeliverApc+0x1c7
fffff880`02eff630 fffff800`050800ea : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiCommitThreadWait+0x3dd
fffff880`02eff6c0 fffff960`0015a6a0 : fffff900`00000002 fffffa80`12328820 fffff900`00000001 fffff880`0000000d : nt!KeWaitForMultipleObjects+0x272
fffff880`02eff980 fffff960`0015b663 : 00000000`00000000 fffff900`c3eaf010 fffff960`003a77c0 00000000`00000004 : win32k!xxxMsgWaitForMultipleObjects+0x108
fffff880`02effa00 fffff960`00115084 : fffffa80`00000001 fffffa80`0000000c fffffa80`13055b50 fffff6fc`40017630 : win32k!xxxDesktopThread+0x253
fffff880`02effa80 fffff960`0019619a : fffffa80`00000001 fffff960`003a77c0 00000000`00000020 00000000`00000000 : win32k!xxxCreateSystemThreads+0x64
fffff880`02effab0 fffff800`0507ce53 : fffffa80`13055b50 00000000`00000004 000007ff`fffaa000 00000000`00000000 : win32k!NtUserCallNoParam+0x36
fffff880`02effae0 000007fe`fd771eea : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiSystemServiceCopyEnd+0x13 (TrapFrame @ fffff880`02effae0)
00000000`0417fd78 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x000007fe`fd771eea
Interesting stack...
We have an NT user call, which appears to be to create a system thread, which then creates a desktop thread. Afterwards, we appear to have to wait and the commit for the wait is called. We then have a need to deliver an APC (asynchronous procedure call - will explain below), which is then completed, and it's inserted into a queue. Directly afterwards however, the Hardware Abstraction Layer requests a software interrupt.
As I said, APC's:
An asynchronous procedure call (APC) is a function that executes asynchronously in the context of a particular thread. When an APC is queued to a thread, the system issues a software interrupt. The next time the thread is scheduled, it will run the APC function. An APC generated by the system is called a kernel-mode APC. An APC generated by an application is called a user-mode APC. A thread must be in an alertable state to run a user-mode APC.
To spare some post-space and time, I'll just go ahead and say that Proc's #6 and #7 weren't too interesting, only in that they had some pool allocation routines going on in the stack, and virtual memory addresses were being freed and deleted.
Overall, avast! does not appear to be playing nice, and it's very evident as to why. I took a look at your loaded modules list, and I see avast! + AVG Secure Search + COMODO. All of this = lots and lots of interceptor conflicts, causing kernel corruption.
1. Remove and replace avast! with Microsoft Security Essentials for temporary troubleshooting purposes:
avast! removal - avast! Uninstall Utility | Download aswClear for avast! Removal
MSE - Microsoft Security Essentials - Microsoft Windows
2. Remove AVG Secure Search.
3. Remove COMODO.
Also, I note TrueCrypt. In my time as an analyst, from what I've seen, 3rd party antiviruses don't seem to play too well with encrypted drives. Just some food for thought.
Regards,
Patrick