libusbk WDF_Violation (BSoD) if device removed during UsbK_SetCurrentAlternateSetting

Matt Liberty <[email protected]>
Newsgroups gmane.comp.lib.libusb.devel.windows
Message-ID <CAJbjG+FR2H4TEwrrdhHkWA9xSc-kofO3HfObe+LSHNjJH+mb8g@mail.gmail.com>
Greetings,

First, thanks for creating the excellent libusbk driver and library.  I
have been successfully using libusbk to convey bulk and isochronous data,
and it works great!  The fact that I have gone from nothing to a working
USB device without joining this list earlier is a testament to the solid
design, good documentation and great examples.

I think that I may have stumbled onto a corner case when the alternate
interface setting is changing while the device is being removed.  I have
noticed that my PC can take up to 500 milliseconds to perform
UsbK_SetCurrentAlternateSetting just after stopping isochronous data
streaming.  Some PCs are much faster, like 20 milliseconds.  If the device
is removed during the user-space call to UsbK_SetCurrentAlternateSetting, I
usually get a WDF_violation on Windows 8 & 8.1, and a Blue Screen of Death
on Windows 7.  The output from WinDbg is attached below.

Should libusbk.sys be validating the handle before calling
imp_WdfIoTargetStart?  This seems like a dangerous race condition that
should be handled by Windows, but I have never done Windows driver
development before.  Any recommendations on how I can address this issue?

Thanks!  I also saw your request for donations, and I am happy to add $100
to support libusbk.

   - Matt


*******************************************************************************
*
  *
*                        Bugcheck Analysis
   *
*
  *
*******************************************************************************

Use !analyze -v to get detailed debugging information.

BugCheck 10D, {5, 1ffff49bafd8, 1200, ffffe0000b253e20}

Probably caused by : libusbK.sys ( libusbK!Pipe_InitContext+cb )

Followup: MachineOwner
---------

2: kd> !analyze -v
*******************************************************************************
*
  *
*                        Bugcheck Analysis
   *
*
  *
*******************************************************************************

WDF_VIOLATION (10d)
The Kernel-Mode Driver Framework was notified that Windows detected an error
in a framework-based driver. In general, the dump file will yield additional
information about the driver that caused this bug check.
Arguments:
Arg1: 0000000000000005, A framework object handle of the incorrect type was
passed to
a framework object method.
Arg2: 00001ffff49bafd8, The handle value passed in.
Arg3: 0000000000001200, Reserved.
Arg4: ffffe0000b253e20, Reserved.

Debugging Details:
------------------


BUGCHECK_STR:  0x10D_5

CUSTOMER_CRASH_COUNT:  1

DEFAULT_BUCKET_ID:  WIN8_DRIVER_FAULT

PROCESS_NAME:  stream.exe

CURRENT_IRQL:  0

ANALYSIS_VERSION: 6.3.9600.17029 (debuggers(dbg).140219-1702) amd64fre

LAST_CONTROL_TRANSFER:  from fffff80000358caa to fffff802eeb52ca0

STACK_TEXT:
ffffd000`3a4d91b8 fffff800`00358caa : 00000000`0000010d 00000000`00000005
00001fff`f49bafd8 00000000`00001200 : nt!KeBugCheckEx
ffffd000`3a4d91c0 fffff800`0032b673 : ffffe000`0b645020 ffffe000`0ba742f0
00001fff`f49bafd8 fffff800`0036f8d5 : Wdf01000!FxVerifierBugCheck+0x1e
ffffd000`3a4d9200 fffff800`00361039 : 00001fff`f49bafd8 00001fff`ff560458
00000000`7562696c fffff800`00366aef :
Wdf01000!FxObjectHandleGetPtrQI+0x3c927
ffffd000`3a4d9270 fffff800`041c310b : ffffd000`3a4d9350 ffffe000`0b250000
00000000`00000000 00000000`00000001 : Wdf01000!imp_WdfIoTargetStart+0x6a
ffffd000`3a4d92b0 fffff800`041c1d47 : 00000000`c0000000 00000000`00000000
ffffe000`0ba74b30 ffffe000`0ba742f0 : libusbK!Pipe_InitContext+0xcb
[z:\svnmain\googlecode\usb-travis\trunk\libusbk\src\sys\drv_pipe.c @ 432]
ffffd000`3a4d92e0 fffff800`041c213a : 00000000`c000000e ffffe000`0ba742f0
ffffe000`0ba742f0 ffffd000`3a4d93f0 : libusbK!Interface_Start+0x37
[z:\svnmain\googlecode\usb-travis\trunk\libusbk\src\sys\drv_interface.c @
86]
ffffd000`3a4d9310 fffff800`041c689b : 00000000`00000000 ffffe000`0ba742f0
00000000`00000000 00001fff`f458bff8 : libusbK!Interface_SetAltSetting+0x24e
[z:\svnmain\googlecode\usb-travis\trunk\libusbk\src\sys\drv_interface.c @
232]
ffffd000`3a4d93b0 fffff800`002e59ce : ffffe000`0b2c3cd0 ffffe000`00b55c20
00000000`00000018 00001fff`f4d3c328 :
libusbK!DefaultQueue_OnIoControl+0x13a3
[z:\svnmain\googlecode\usb-travis\trunk\libusbk\src\sys\drv_queue_default.c
@ 376]
ffffd000`3a4d9460 fffff800`002e5123 : ffffc000`1b3f2800 ffffe000`0ba69880
00000000`00000300 00000000`00000001 :
Wdf01000!FxIoQueue::DispatchRequestToDriver+0x1be
ffffd000`3a4d9530 fffff800`002ec2f2 : ffffe000`00b55c20 ffffd000`3a4d9600
00000000`00000000 ffffe000`00b55c01 :
Wdf01000!FxIoQueue::DispatchEvents+0x363
ffffd000`3a4d95f0 fffff800`002ec658 : 00000000`00000001 ffffe000`04ed5660
00000000`00000000 ffffe000`0b4e0000 : Wdf01000!FxPkgIo::EnqueueRequest+0x252
ffffd000`3a4d96c0 fffff800`041c2c30 : ffffe000`0b2c3e70 ffffe000`0ba74000
00000000`00000000 ffffe000`0b2c3cd0 :
Wdf01000!imp_WdfDeviceEnqueueRequest+0xc9
ffffd000`3a4d9720 fffff800`002e99bd : 00000000`00000001 00001fff`f4d3c328
ffffe000`046aa240 00000000`00000018 : libusbK!Request_PreIoInitialize+0x130
[z:\svnmain\googlecode\usb-travis\trunk\libusbk\src\sys\drv_request.c @ 304]
ffffd000`3a4d9790 fffff802`eedb03e5 : 00000000`00000000 ffffd000`3a4d9b01
ffffe000`0ba74001 fffff802`00000001 :
Wdf01000!FxDevice::DispatchWithLock+0x77d
ffffd000`3a4d9870 fffff802`eedb0d7a : ffffd000`3a4d9a38 00000000`0000005f
00000000`00000000 000000f7`2fe0ec88 : nt!IopXxxControlFile+0x845
ffffd000`3a4d9a20 fffff802`eeb5e4b3 : ffffe000`0ba69880 00000000`001f0003
000000f7`2fe0eb48 00000000`00000000 : nt!NtDeviceIoControlFile+0x56
ffffd000`3a4d9a90 00007ffb`182665ea : 00000000`00000000 00000000`00000000
00000000`00000000 00000000`00000000 : nt!KiSystemServiceCopyEnd+0x13
000000f7`2fe0eab8 00000000`00000000 : 00000000`00000000 00000000`00000000
00000000`00000000 00000000`00000000 : 0x00007ffb`182665ea


STACK_COMMAND:  kb

FOLLOWUP_IP:
libusbK!Pipe_InitContext+cb
[z:\svnmain\googlecode\usb-travis\trunk\libusbk\src\sys\drv_pipe.c @ 432]
fffff800`041c310b 8bf8            mov     edi,eax

FAULTING_SOURCE_LINE:
 z:\svnmain\googlecode\usb-travis\trunk\libusbk\src\sys\drv_pipe.c

FAULTING_SOURCE_FILE:
 z:\svnmain\googlecode\usb-travis\trunk\libusbk\src\sys\drv_pipe.c

FAULTING_SOURCE_LINE_NUMBER:  432

FAULTING_SOURCE_CODE:
No source found for
'z:\svnmain\googlecode\usb-travis\trunk\libusbk\src\sys\drv_pipe.c'


SYMBOL_STACK_INDEX:  4

SYMBOL_NAME:  libusbK!Pipe_InitContext+cb

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: libusbK

IMAGE_NAME:  libusbK.sys

DEBUG_FLR_IMAGE_TIMESTAMP:  5207c443

IMAGE_VERSION:  3.0.6.0

BUCKET_ID_FUNC_OFFSET:  cb

FAILURE_BUCKET_ID:  0x10D_5_libusbK!Pipe_InitContext

BUCKET_ID:  0x10D_5_libusbK!Pipe_InitContext

ANALYSIS_SOURCE:  KM

FAILURE_ID_HASH_STRING:  km:0x10d_5_libusbk!pipe_initcontext

FAILURE_ID_HASH:  {fbb003e7-b70a-0bc3-4274-781915951631}

Followup: MachineOwner
---------

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees

_______________________________________________
Libusb-win32-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libusb-win32-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.