Author: tkreuzer
Date: Fri May 10 19:46:50 2013
New Revision: 58985

URL: http://svn.reactos.org/svn/reactos?rev=58985&view=rev
Log:
[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

Modified:
    trunk/reactos/drivers/storage/ide/uniata/id_ata.cpp
    trunk/reactos/drivers/storage/scsiport/scsiport.c

Modified: trunk/reactos/drivers/storage/ide/uniata/id_ata.cpp
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/ide/uniata/id_ata.cpp?rev=58985&r1=58984&r2=58985&view=diff
==============================================================================
--- trunk/reactos/drivers/storage/ide/uniata/id_ata.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/storage/ide/uniata/id_ata.cpp [iso-8859-1] Fri May 10 
19:46:50 2013
@@ -10671,8 +10671,8 @@
 //    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"));

Modified: trunk/reactos/drivers/storage/scsiport/scsiport.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/scsiport/scsiport.c?rev=58985&r1=58984&r2=58985&view=diff
==============================================================================
--- trunk/reactos/drivers/storage/scsiport/scsiport.c   [iso-8859-1] (original)
+++ trunk/reactos/drivers/storage/scsiport/scsiport.c   [iso-8859-1] Fri May 10 
19:46:50 2013
@@ -623,8 +623,8 @@
 {
     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 @@
         PhysicalAddress.QuadPart = (LONGLONG)(SP_UNINITIALIZED_VALUE);
     }
 
-    *Length = BufferLength;
+    *Length = (ULONG)BufferLength;
     return PhysicalAddress;
 }
 
@@ -1034,6 +1034,7 @@
     KIRQL OldIrql;
     PCM_RESOURCE_LIST ResourceList;
     BOOLEAN Conflict;
+    SIZE_T BusConfigSize;
 
 
     DPRINT ("ScsiPortInitialize() called!\n");
@@ -1635,10 +1636,11 @@
       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 @@
       }
 
       /* 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 @@
 
     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 @@
         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 @@
             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 @@
                         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 @@
                                         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 @@
                                         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);


Reply via email to