https://git.reactos.org/?p=reactos.git;a=commitdiff;h=08248e83a0babebef805a0df3bdd0d59b2e7b82e

commit 08248e83a0babebef805a0df3bdd0d59b2e7b82e
Author:     Atharva Kulkarni <[email protected]>
AuthorDate: Wed Mar 22 03:31:18 2023 +0530
Commit:     GitHub <[email protected]>
CommitDate: Wed Mar 22 01:01:18 2023 +0300

    [UNIATA] Fix Memory leak while claiming PCI IDE controller (#5053)
    
    HalAssignSlotResources will allocate a new resource list which the caller 
must free.
---
 drivers/storage/ide/uniata/id_probe.cpp | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/drivers/storage/ide/uniata/id_probe.cpp 
b/drivers/storage/ide/uniata/id_probe.cpp
index 1ca49d248ec..c950e6f9d8f 100644
--- a/drivers/storage/ide/uniata/id_probe.cpp
+++ b/drivers/storage/ide/uniata/id_probe.cpp
@@ -1941,8 +1941,11 @@ UniataClaimLegacyPCIIDE(
     )
 {
     NTSTATUS status;
-    PCM_RESOURCE_LIST resourceList = NULL;
     UNICODE_STRING devname;
+    PCM_RESOURCE_LIST resourceList = NULL;
+#ifdef __REACTOS__
+    PCM_RESOURCE_LIST oldResList = NULL;
+#endif
 
     KdPrint2((PRINT_PREFIX "UniataClaimLegacyPCIIDE:\n"));
 
@@ -1970,6 +1973,10 @@ UniataClaimLegacyPCIIDE(
 del_do:
         IoDeleteDevice(BMList[i].PciIdeDevObj);
         BMList[i].PciIdeDevObj          = NULL;
+#ifdef __REACTOS__
+        if (oldResList)
+            ExFreePool(oldResList);
+#endif
         return status;
     }
 
@@ -1977,6 +1984,10 @@ del_do:
         resourceList,
         sizeof(CM_RESOURCE_LIST));
 
+#ifdef __REACTOS__
+    oldResList = resourceList;
+#endif
+
     // IoReportDetectedDevice() should be used for WDM OSes
 
     // TODO: check if resourceList is actually used inside 
HalAssignSlotResources()
@@ -2006,6 +2017,11 @@ del_do:
         goto del_do;
     }
 
+#ifdef __REACTOS__
+    ExFreePool(resourceList);
+    ExFreePool(oldResList);
+#endif
+
     KdPrint2((PRINT_PREFIX "ok %#x\n", status));
     BMList[i].ChanInitOk |= 0x80;
 

Reply via email to