[UDFS] Fix accessing an already freed pointer in UDFMarkAllocatedAsNotXXX()
authorVictor Martinez <vicmarcal@gmail.com>
Sat, 17 Aug 2019 13:30:21 +0000 (16:30 +0300)
committerVictor Perevertkin <victor@perevertkin.ru>
Sat, 17 Aug 2019 13:49:11 +0000 (16:49 +0300)
CORE-11182

drivers/filesystems/udfs/udf_info/extent.cpp

index db4f23f..5e507d3 100644 (file)
@@ -2158,6 +2158,7 @@ UDFMarkAllocatedAsNotXXX(
         Extent[i].extLocation = 0;
         Extent[i].extLength = (Extent[i].extLength & UDF_EXTENT_LENGTH_MASK) | flags;
         NewExtent = Extent;
+        Extent = NULL;
         AdPrint(("Alloc->Not (1) NewExtent = Extent = %x\n", NewExtent));
     } else
     if(l < BOffs) {
@@ -2211,15 +2212,17 @@ UDFMarkAllocatedAsNotXXX(
     if(Deallocate)
         UDFMarkSpaceAsXXX(Vcb, (-1), TmpExtInf.Mapping, AS_DISCARDED); // mark as free
 
+    ExtInfo->Modified = TRUE;
+    ExtInfo->Mapping = NewExtent;
+    
+    AdPrint(("Alloc->Not: ExtInfo %x, Extent %x\n", ExtInfo, ExtInfo->Mapping));
+
     if(Extent) {
         AdPrint(("Alloc->Not kill %x\n", Extent));
         MyFreePool__(Extent);
     } else {
         AdPrint(("Alloc->Not keep %x\n", Extent));
     }
-    ExtInfo->Modified = TRUE;
-    ExtInfo->Mapping = NewExtent;
-    AdPrint(("Alloc->Not: ExtInfo %x, Extent %x\n", ExtInfo, ExtInfo->Mapping));
 
     return STATUS_SUCCESS;
 } // end UDFMarkAllocatedAsNotXXX()