[ros-diffs] [cgutman] 40773: - Fix memory corruption when reading binary data

cgutman at svn.reactos.org cgutman at svn.reactos.org
Sat May 2 22:46:51 CEST 2009


Author: cgutman
Date: Sun May  3 00:46:50 2009
New Revision: 40773

URL: http://svn.reactos.org/svn/reactos?rev=40773&view=rev
Log:
 - Fix memory corruption when reading binary data

Modified:
    trunk/reactos/drivers/network/ndis/ndis/config.c

Modified: trunk/reactos/drivers/network/ndis/ndis/config.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/ndis/ndis/config.c?rev=40773&r1=40772&r2=40773&view=diff
==============================================================================
--- trunk/reactos/drivers/network/ndis/ndis/config.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/ndis/ndis/config.c [iso-8859-1] Sun May  3 00:46:50 2009
@@ -615,13 +615,23 @@
                 return;
             }
 
+            (*ParameterValue)->ParameterData.BinaryData.Buffer = ExAllocatePool(PagedPool, KeyInformation->DataLength);
+            if (!(*ParameterValue)->ParameterData.BinaryData.Buffer)
+            {
+                NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n"));
+                ExFreePool(KeyInformation);
+                *Status = NDIS_STATUS_RESOURCES;
+                return;
+            }
+
+            (*ParameterValue)->ParameterType = ParameterType;
+            (*ParameterValue)->ParameterData.BinaryData.Length = KeyInformation->DataLength;
+            memcpy((*ParameterValue)->ParameterData.BinaryData.Buffer, KeyInformation->Data, KeyInformation->DataLength);
+
             MiniportResource->ResourceType = 0;
             MiniportResource->Resource = *ParameterValue;
             NDIS_DbgPrint(MID_TRACE,("inserting 0x%x into the resource list\n", MiniportResource->Resource));
             ExInterlockedInsertTailList(&ConfigurationContext->ResourceListHead, &MiniportResource->ListEntry, &ConfigurationContext->ResourceLock);
-
-            (*ParameterValue)->ParameterType = ParameterType;
-            memcpy(&((*ParameterValue)->ParameterData.BinaryData), KeyInformation->Data, KeyInformation->DataLength);
 
             ExFreePool(KeyInformation);
 



More information about the Ros-diffs mailing list