mirror of
https://github.com/reactos/reactos.git
synced 2026-05-30 14:34:57 +08:00
[USBSTOR] Do not leak fields of DeviceExtensions upon device removal
This commit is contained in:
@@ -108,8 +108,27 @@ USBSTOR_FdoHandleRemoveDevice(
|
||||
}
|
||||
}
|
||||
|
||||
// Freeing everything in DeviceExtension
|
||||
ASSERT(
|
||||
DeviceExtension->DeviceDescriptor &&
|
||||
DeviceExtension->ConfigurationDescriptor &&
|
||||
DeviceExtension->InterfaceInformation &&
|
||||
DeviceExtension->ResetDeviceWorkItem
|
||||
);
|
||||
|
||||
ExFreePoolWithTag(DeviceExtension->DeviceDescriptor, USB_STOR_TAG);
|
||||
ExFreePoolWithTag(DeviceExtension->ConfigurationDescriptor, USB_STOR_TAG);
|
||||
ExFreePoolWithTag(DeviceExtension->InterfaceInformation, USB_STOR_TAG);
|
||||
IoFreeWorkItem(DeviceExtension->ResetDeviceWorkItem);
|
||||
|
||||
if (DeviceExtension->SerialNumber)
|
||||
{
|
||||
ExFreePoolWithTag(DeviceExtension->SerialNumber, USB_STOR_TAG);
|
||||
}
|
||||
|
||||
// Send the IRP down the stack
|
||||
IoSkipCurrentIrpStackLocation(Irp);
|
||||
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||
Status = IoCallDriver(DeviceExtension->LowerDeviceObject, Irp);
|
||||
|
||||
// Detach from the device stack
|
||||
|
||||
@@ -575,6 +575,10 @@ USBSTOR_PdoHandlePnp(
|
||||
bDelete = FALSE;
|
||||
}
|
||||
|
||||
// clean up the device extension
|
||||
ASSERT(DeviceExtension->InquiryData);
|
||||
ExFreePoolWithTag(DeviceExtension->InquiryData, USB_STOR_TAG);
|
||||
|
||||
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
|
||||
@@ -658,7 +662,7 @@ USBSTOR_SyncCompletionRoutine(
|
||||
|
||||
/*
|
||||
* @name USBSTOR_SendInternalCdb
|
||||
*
|
||||
*
|
||||
* Issues an internal SCSI request to device.
|
||||
* The request is sent in a synchronous way.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user