From 7647f5307510fbf4f3287db77033325db5c07f14 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 10 May 2013 19:46:50 +0000 Subject: [PATCH] [SCSIPORT] Fix a bug in size calculation that causes memory corruption on 64 bit Fix some MSVC/x64 warnings [UNIATA] Fix some MSVC/x64 warnings svn path=/trunk/; revision=58985 --- reactos/drivers/storage/ide/uniata/id_ata.cpp | 4 +-- reactos/drivers/storage/scsiport/scsiport.c | 29 ++++++++++--------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/reactos/drivers/storage/ide/uniata/id_ata.cpp b/reactos/drivers/storage/ide/uniata/id_ata.cpp index fe10e9b7353..d5ca7d4983e 100644 --- a/reactos/drivers/storage/ide/uniata/id_ata.cpp +++ b/reactos/drivers/storage/ide/uniata/id_ata.cpp @@ -10671,8 +10671,8 @@ AtapiRegCheckParameterValue( // KdPrint(( "AtapiCheckRegValue: RegistryPath %ws\n", RegistryPath->Buffer)); paramPath.Length = 0; - paramPath.MaximumLength = RegistryPath->Length + - (wcslen(PathSuffix)+2)*sizeof(WCHAR); + paramPath.MaximumLength = (USHORT)(RegistryPath->Length + + (wcslen(PathSuffix)+2)*sizeof(WCHAR)); paramPath.Buffer = (PWCHAR)ExAllocatePool(NonPagedPool, paramPath.MaximumLength); if(!paramPath.Buffer) { KdPrint(("AtapiCheckRegValue: couldn't allocate paramPath\n")); diff --git a/reactos/drivers/storage/scsiport/scsiport.c b/reactos/drivers/storage/scsiport/scsiport.c index 76562296a08..d3e1b326200 100644 --- a/reactos/drivers/storage/scsiport/scsiport.c +++ b/reactos/drivers/storage/scsiport/scsiport.c @@ -623,8 +623,8 @@ ScsiPortGetPhysicalAddress(IN PVOID HwDeviceExtension, { PSCSI_PORT_DEVICE_EXTENSION DeviceExtension; SCSI_PHYSICAL_ADDRESS PhysicalAddress; - ULONG BufferLength = 0; - ULONG Offset; + SIZE_T BufferLength = 0; + ULONG_PTR Offset; PSCSI_SG_ADDRESS SGList; PSCSI_REQUEST_BLOCK_INFO SrbInfo; @@ -673,7 +673,7 @@ ScsiPortGetPhysicalAddress(IN PVOID HwDeviceExtension, PhysicalAddress.QuadPart = (LONGLONG)(SP_UNINITIALIZED_VALUE); } - *Length = BufferLength; + *Length = (ULONG)BufferLength; return PhysicalAddress; } @@ -1034,6 +1034,7 @@ ScsiPortInitialize(IN PVOID Argument1, KIRQL OldIrql; PCM_RESOURCE_LIST ResourceList; BOOLEAN Conflict; + SIZE_T BusConfigSize; DPRINT ("ScsiPortInitialize() called!\n"); @@ -1635,10 +1636,11 @@ CreatePortConfig: IoStartTimer(PortDeviceObject); /* Initialize bus scanning information */ + BusConfigSize = FIELD_OFFSET(BUSES_CONFIGURATION_INFORMATION, + BusScanInfo[DeviceExtension->PortConfig->NumberOfBuses]); DeviceExtension->BusesConfig = ExAllocatePoolWithTag(PagedPool, - sizeof(PVOID) * DeviceExtension->PortConfig->NumberOfBuses - + sizeof(ULONG), TAG_SCSIPORT); - + BusConfigSize, + TAG_SCSIPORT); if (!DeviceExtension->BusesConfig) { DPRINT1("Out of resources!\n"); @@ -1647,9 +1649,7 @@ CreatePortConfig: } /* Zero it */ - RtlZeroMemory(DeviceExtension->BusesConfig, - sizeof(PVOID) * DeviceExtension->PortConfig->NumberOfBuses - + sizeof(ULONG)); + RtlZeroMemory(DeviceExtension->BusesConfig, BusConfigSize); /* Store number of buses there */ DeviceExtension->BusesConfig->NumberOfBuses = (UCHAR)DeviceExtension->BusNum; @@ -2622,6 +2622,7 @@ ScsiPortDispatchScsi(IN PDEVICE_OBJECT DeviceObject, case SRB_FUNCTION_EXECUTE_SCSI: case SRB_FUNCTION_IO_CONTROL: + DPRINT(" SRB_FUNCTION_EXECUTE_SCSI or SRB_FUNCTION_IO_CONTROL\n"); /* Mark IRP as pending in all cases */ IoMarkIrpPending(Irp); @@ -4013,7 +4014,7 @@ SpiGetInquiryData(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, BusData = &AdapterBusInfo->BusData[Bus]; /* Calculate and save an offset of the inquiry data */ - BusData->InquiryDataOffset = (PUCHAR)InquiryData - Buffer; + BusData->InquiryDataOffset = (ULONG)((PUCHAR)InquiryData - Buffer); /* Get a pointer to the LUN information structure */ LunInfo = DeviceExtension->BusesConfig->BusScanInfo[Bus]->LunInfo; @@ -4039,7 +4040,7 @@ SpiGetInquiryData(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, InquiryData->InquiryDataLength = INQUIRYDATABUFFERSIZE; InquiryData->DeviceClaimed = LunInfo->DeviceClaimed; InquiryData->NextInquiryDataOffset = - (PUCHAR)InquiryData + InquiryDataSize - Buffer; + (ULONG)((PUCHAR)InquiryData + InquiryDataSize - Buffer); /* Copy data in it */ RtlCopyMemory(InquiryData->InquiryData, @@ -5364,7 +5365,7 @@ SpiBuildDeviceMap (PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, 0, REG_SZ, DriverName, - (wcslen(DriverName) + 1) * sizeof(WCHAR)); + (ULONG)((wcslen(DriverName) + 1) * sizeof(WCHAR))); if (!NT_SUCCESS(Status)) { DPRINT("ZwSetValueKey('Driver') failed (Status %lx)\n", Status); @@ -5557,7 +5558,7 @@ SpiBuildDeviceMap (PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, 0, REG_SZ, NameBuffer, - (wcslen(NameBuffer) + 1) * sizeof(WCHAR)); + (ULONG)((wcslen(NameBuffer) + 1) * sizeof(WCHAR))); if (!NT_SUCCESS(Status)) { DPRINT("ZwSetValueKey('Identifier') failed (Status %lx)\n", Status); @@ -5606,7 +5607,7 @@ SpiBuildDeviceMap (PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, 0, REG_SZ, TypeName, - (wcslen(TypeName) + 1) * sizeof(WCHAR)); + (ULONG)((wcslen(TypeName) + 1) * sizeof(WCHAR))); if (!NT_SUCCESS(Status)) { DPRINT("ZwSetValueKey('Type') failed (Status %lx)\n", Status);