[ros-diffs] [cgutman] 35964: - Handle AllocatedResources and AllocatedResourcesTranslated separately - Fix a memory leak - Fix a handle leak

cgutman at svn.reactos.org cgutman at svn.reactos.org
Fri Sep 5 21:51:19 CEST 2008


Author: cgutman
Date: Fri Sep  5 14:51:18 2008
New Revision: 35964

URL: http://svn.reactos.org/svn/reactos?rev=35964&view=rev
Log:
 - Handle AllocatedResources and AllocatedResourcesTranslated separately
 - Fix a memory leak
 - Fix a handle leak

Modified:
    branches/aicom-network-fixes/drivers/network/ndis/ndis/miniport.c
    branches/aicom-network-fixes/drivers/network/ndis/ndis/protocol.c

Modified: branches/aicom-network-fixes/drivers/network/ndis/ndis/miniport.c
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/ndis/ndis/miniport.c?rev=35964&r1=35963&r2=35964&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/ndis/ndis/miniport.c [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/ndis/ndis/miniport.c [iso-8859-1] Fri Sep  5 14:51:18 2008
@@ -1293,8 +1293,7 @@
    * NdisMQueryAdapterResources.
    */
 
-  if (Stack->Parameters.StartDevice.AllocatedResources != NULL &&
-      Stack->Parameters.StartDevice.AllocatedResourcesTranslated != NULL)
+  if (Stack->Parameters.StartDevice.AllocatedResources != NULL)
     {
       ResourceCount = Stack->Parameters.StartDevice.AllocatedResources->List[0].
                       PartialResourceList.Count;
@@ -1310,24 +1309,31 @@
           return STATUS_INSUFFICIENT_RESOURCES;
         }
 
+      RtlCopyMemory(Adapter->NdisMiniportBlock.AllocatedResources,
+                    Stack->Parameters.StartDevice.AllocatedResources,
+                    ResourceListSize);
+    }
+
+  if (Stack->Parameters.StartDevice.AllocatedResourcesTranslated != NULL)
+    {
+      ResourceCount = Stack->Parameters.StartDevice.AllocatedResources->List[0].
+                      PartialResourceList.Count;
+      ResourceListSize =
+        FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.
+                     PartialDescriptors[ResourceCount]);
+
       Adapter->NdisMiniportBlock.AllocatedResourcesTranslated =
         ExAllocatePool(PagedPool, ResourceListSize);
       if (Adapter->NdisMiniportBlock.AllocatedResourcesTranslated == NULL)
         {
-          ExFreePool(Adapter->NdisMiniportBlock.AllocatedResources);
-          Adapter->NdisMiniportBlock.AllocatedResources = NULL;
 	  ExInterlockedRemoveEntryList( &Adapter->ListEntry, &AdapterListLock );
           return STATUS_INSUFFICIENT_RESOURCES;
         }
 
-      RtlCopyMemory(Adapter->NdisMiniportBlock.AllocatedResources,
-                    Stack->Parameters.StartDevice.AllocatedResources,
-                    ResourceListSize);
-
       RtlCopyMemory(Adapter->NdisMiniportBlock.AllocatedResourcesTranslated,
                     Stack->Parameters.StartDevice.AllocatedResourcesTranslated,
                     ResourceListSize);
-    }
+   }
 
   /*
    * Store the Bus Type, Bus Number and Slot information. It's used by

Modified: branches/aicom-network-fixes/drivers/network/ndis/ndis/protocol.c
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/ndis/ndis/protocol.c?rev=35964&r1=35963&r2=35964&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/ndis/ndis/protocol.c [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/ndis/ndis/protocol.c [iso-8859-1] Fri Sep  5 14:51:18 2008
@@ -805,10 +805,11 @@
     NtStatus = ZwQueryValueKey(DriverKeyHandle, &ValueName, KeyValuePartialInformation, KeyInformation,
         sizeof(KEY_VALUE_PARTIAL_INFORMATION) + ResultLength, &ResultLength);
 
+    ZwClose(DriverKeyHandle);
+
     if(!NT_SUCCESS(NtStatus))
       {
         NDIS_DbgPrint(MIN_TRACE, ("Unable to query the Bind value\n"));
-        ZwClose(DriverKeyHandle);
         ExFreePool(KeyInformation);
         ExFreePool(Protocol);
         *Status = NDIS_STATUS_FAILURE;
@@ -893,7 +894,8 @@
        */
     }
 
-  *Status             = NDIS_STATUS_SUCCESS;
+  ExFreePool(KeyInformation);
+  *Status = NDIS_STATUS_SUCCESS;
 }
 
 



More information about the Ros-diffs mailing list