Protect against writes beyond the end of partition.
Modified: trunk/reactos/drivers/storage/disk/disk.c
_____
Modified: trunk/reactos/drivers/storage/disk/disk.c
--- trunk/reactos/drivers/storage/disk/disk.c 2005-02-01 20:49:03 UTC
(rev 13385)
+++ trunk/reactos/drivers/storage/disk/disk.c 2005-02-01 21:21:33 UTC
(rev 13386)
@@ -390,6 +390,8 @@
{
PDEVICE_EXTENSION DeviceExtension;
PDISK_DATA DiskData;
+ PIO_STACK_LOCATION IrpStack;
+ ULARGE_INTEGER EndingOffset;
DPRINT("DiskClassCheckReadWrite() called\n");
@@ -404,6 +406,16 @@
return(STATUS_INVALID_PARAMETER);
}
+ IrpStack = IoGetCurrentIrpStackLocation(Irp);
+ EndingOffset.QuadPart = IrpStack->Parameters.Read.ByteOffset.QuadPart
+
+ IrpStack->Parameters.Read.Length;
+
+ if (EndingOffset.QuadPart >
DeviceExtension->PartitionLength.QuadPart)
+ {
+ Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
+ return(STATUS_INVALID_PARAMETER);
+ }
+
return(STATUS_SUCCESS);
}