[USBSTOR]

- In USBSTOR_GetMaxLUN, correctly handle devices that do not support this request. Patch by Vadim Galyant.
CORE-10515 #resolve

svn path=/trunk/; revision=71128
This commit is contained in:
Thomas Faber 2016-04-09 16:13:37 +00:00
parent ce2ec6562e
commit 372ab04bc4

View file

@ -23,7 +23,7 @@ NTSTATUS
NTAPI
USBSTOR_SyncForwardIrpCompletionRoutine(
PDEVICE_OBJECT DeviceObject,
PIRP Irp,
PIRP Irp,
PVOID Context)
{
if (Irp->PendingReturned)
@ -362,19 +362,34 @@ USBSTOR_GetMaxLUN(
DPRINT("MaxLUN: %x\n", *Buffer);
if (*Buffer > 0xF)
if (NT_SUCCESS(Status))
{
//
// invalid response documented in usb mass storage specification
//
Status = STATUS_DEVICE_DATA_ERROR;
if (*Buffer > 0xF)
{
//
// invalid response documented in usb mass storage specification
//
Status = STATUS_DEVICE_DATA_ERROR;
}
else
{
//
// store maxlun
//
DeviceExtension->MaxLUN = *Buffer;
}
}
else
{
//
// store maxlun
// "USB Mass Storage Class. Bulk-Only Transport. Revision 1.0"
// 3.2 Get Max LUN (class-specific request) :
// Devices that do not support multiple LUNs may STALL this command.
//
DeviceExtension->MaxLUN = *Buffer;
USBSTOR_ResetDevice(DeviceExtension->LowerDeviceObject, DeviceExtension);
DeviceExtension->MaxLUN = 0;
Status = STATUS_SUCCESS;
}
//