[ros-diffs] [sginsberg] 36487: - IopGetDiskInformation: Fail if we are out of memory instead of dereferencing null - Fix for Coverity error CID: 469 - Also fix a (potential) memory leak

sginsberg at svn.reactos.org sginsberg at svn.reactos.org
Wed Sep 24 18:37:36 CEST 2008


Author: sginsberg
Date: Wed Sep 24 11:37:35 2008
New Revision: 36487

URL: http://svn.reactos.org/svn/reactos?rev=36487&view=rev
Log:
- IopGetDiskInformation: Fail if we are out of memory instead of dereferencing null
- Fix for Coverity error CID: 469
- Also fix a (potential) memory leak

Modified:
    trunk/reactos/ntoskrnl/io/iomgr/arcname.c

Modified: trunk/reactos/ntoskrnl/io/iomgr/arcname.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/arcname.c?rev=36487&r1=36486&r2=36487&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/arcname.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/arcname.c [iso-8859-1] Wed Sep 24 11:37:35 2008
@@ -217,7 +217,12 @@
     PartitionBuffer = ExAllocatePoolWithTag(NonPagedPool,
                                             DiskGeometry.BytesPerSector,
                                             TAG_IO);
-    if (!PartitionBuffer) return FALSE;
+    if (!PartitionBuffer)
+    {
+        /* Try again */
+        ExFreePoolWithTag(DriveLayout, TAG_FILE_SYSTEM);
+        return FALSE;
+    }
 
     /* Build an IRP to read the partition sector */
     KeInitializeEvent(&Event, NotificationEvent, FALSE);
@@ -228,6 +233,13 @@
                                        &PartitionOffset,
                                        &Event,
                                        &StatusBlock);
+    if (!Irp)
+    {
+        /* Try again  */
+        ExFreePoolWithTag(PartitionBuffer, TAG_IO);
+        ExFreePoolWithTag(DriveLayout, TAG_FILE_SYSTEM);
+        return FALSE;
+    }
 
     /* Call the driver and check if we have to wait */
     Status = IoCallDriver(DeviceObject, Irp);



More information about the Ros-diffs mailing list