]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPkg/BdsLib: Fix allocating kernel buffer in TFTP
authorBrendan Jackman <Brendan.JackMan@arm.com>
Wed, 14 May 2014 16:39:43 +0000 (16:39 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 14 May 2014 16:39:43 +0000 (16:39 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Brendan Jackman <Brendan.JackMan@arm.com>
Reviewed-By: Olivier Martin <olivier.martin@arm.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15527 6f19259b-4bc3-4df7-8a09-765794883524

ArmPkg/Library/BdsLib/BdsFilePath.c

index 487bd7654cebe985c36eb642af8d6afef17e1b4d..90be9c1e117895282f106a47abb2dd21d80012c1 100644 (file)
@@ -756,7 +756,6 @@ BdsTftpLoadImage (
   EFI_STATUS                  Status;\r
   EFI_PXE_BASE_CODE_PROTOCOL  *Pxe;\r
   UINT64                      TftpBufferSize;\r
-  VOID*                       TftpBuffer;\r
   EFI_IP_ADDRESS              ServerIp;\r
   IPv4_DEVICE_PATH*           IPv4DevicePathNode;\r
   FILEPATH_DEVICE_PATH*       FilePathDevicePath;\r
@@ -838,16 +837,21 @@ BdsTftpLoadImage (
   }\r
 \r
   // Allocate a buffer to hold the whole file.\r
-  TftpBuffer = AllocatePool (TftpBufferSize);\r
-  if (TftpBuffer == NULL) {\r
-    Status = EFI_OUT_OF_RESOURCES;\r
+  Status = gBS->AllocatePages (\r
+                  Type,\r
+                  EfiBootServicesCode,\r
+                  EFI_SIZE_TO_PAGES (TftpBufferSize),\r
+                  Image\r
+                  );\r
+  if (EFI_ERROR (Status)) {\r
+    DEBUG ((EFI_D_ERROR, "Failed to allocate space for kernel image: %r\n", Status));\r
     goto EXIT;\r
   }\r
 \r
   Status = Pxe->Mtftp (\r
                   Pxe,\r
                   EFI_PXE_BASE_CODE_TFTP_READ_FILE,\r
-                  TftpBuffer,\r
+                  (VOID *)(UINTN)*Image,\r
                   FALSE,\r
                   &TftpBufferSize,\r
                   NULL,\r
@@ -857,9 +861,8 @@ BdsTftpLoadImage (
                   FALSE\r
                   );\r
   if (EFI_ERROR (Status)) {\r
-    FreePool (TftpBuffer);\r
-  } else if (ImageSize != NULL) {\r
-    *Image = (UINTN)TftpBuffer;\r
+    gBS->FreePages (*Image, EFI_SIZE_TO_PAGES (TftpBufferSize));\r
+  } else {\r
     *ImageSize = (UINTN)TftpBufferSize;\r
   }\r
 \r