https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e47240fb371b65ff76d3e1176110d288da8bf944
commit e47240fb371b65ff76d3e1176110d288da8bf944 Author: Thomas Faber <thomas.fa...@reactos.org> AuthorDate: Tue Mar 5 22:27:15 2019 +0100 Commit: Thomas Faber <thomas.fa...@reactos.org> CommitDate: Mon Mar 11 08:53:50 2019 +0100 [USBPORT] Release StateChangeSpinLock before acquiring MiniportSpinLock. Found by Driver Verifier. --- drivers/usb/usbport/endpoint.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/usb/usbport/endpoint.c b/drivers/usb/usbport/endpoint.c index 385206a0c8..c1624ec297 100644 --- a/drivers/usb/usbport/endpoint.c +++ b/drivers/usb/usbport/endpoint.c @@ -1252,6 +1252,7 @@ USBPORT_ReopenPipe(IN PDEVICE_OBJECT FdoDevice, if (Endpoint->StateLast == USBPORT_ENDPOINT_ACTIVE) { + KeReleaseSpinLockFromDpcLevel(&Endpoint->StateChangeSpinLock); KeAcquireSpinLockAtDpcLevel(&FdoExtension->MiniportSpinLock); Packet->SetEndpointState(FdoExtension->MiniPortExt, @@ -1260,8 +1261,11 @@ USBPORT_ReopenPipe(IN PDEVICE_OBJECT FdoDevice, KeReleaseSpinLockFromDpcLevel(&FdoExtension->MiniportSpinLock); } + else + { + KeReleaseSpinLockFromDpcLevel(&Endpoint->StateChangeSpinLock); + } - KeReleaseSpinLockFromDpcLevel(&Endpoint->StateChangeSpinLock); KeReleaseSpinLock(&Endpoint->EndpointSpinLock, Endpoint->EndpointOldIrql); }