]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Disk/UdfDxe/FileSystemOperations.c
MdeModulePkg/UdfDxe: Avoid possible use of already-freed data
[mirror_edk2.git] / MdeModulePkg / Universal / Disk / UdfDxe / FileSystemOperations.c
index cabb599695aaa684476263e108d2a2315e83ab48..b9ebddfe6293ad8a353297168acf390f2aa3657f 100644 (file)
@@ -1078,6 +1078,7 @@ ReadFile (
   EFI_STATUS              Status;\r
   UINT32                  LogicalBlockSize;\r
   VOID                    *Data;\r
+  VOID                    *DataBak;\r
   UINT64                  Length;\r
   VOID                    *Ad;\r
   UINT64                  AdOffset;\r
@@ -1218,12 +1219,7 @@ ReadFile (
       // Descriptor and its extents (ADs).\r
       //\r
       if (GET_EXTENT_FLAGS (RecordingFlags, Ad) == ExtentIsNextExtent) {\r
-        if (!DoFreeAed) {\r
-          DoFreeAed = TRUE;\r
-        } else {\r
-          FreePool (Data);\r
-        }\r
-\r
+        DataBak = Data;\r
         Status = GetAedAdsData (\r
           BlockIo,\r
           DiskIo,\r
@@ -1234,6 +1230,13 @@ ReadFile (
           &Data,\r
           &Length\r
           );\r
+\r
+        if (!DoFreeAed) {\r
+          DoFreeAed = TRUE;\r
+        } else {\r
+          FreePool (DataBak);\r
+        }\r
+\r
         if (EFI_ERROR (Status)) {\r
           goto Error_Get_Aed;\r
         }\r