Reviewed-By: Olivier Martin <olivier.mar...@arm.com>

-----Original Message-----
From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org]
Sent: 05 May 2015 13:19
To: Olivier Martin; edk2-devel@lists.sourceforge.net; Ronald Cron
Cc: leif.lindh...@linaro.org; roy.fr...@linaro.org; Ard Biesheuvel
Subject: [PATCH] EmbeddedPkg: do not ASSERT() on valid external input

Since ASSERT()s are enabled even on all ArmPlatformPkg RELEASE builds, 
ASSERT()ing on a valid FDT header will crash the firmware if the user selects 
an incorrect file. Since ASSERT() is meant to catch internal inconsistencies in 
the firmware, its use here is inappropriate.

Instead, handle it as a normal error condition.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
---
 EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatform.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatform.c 
b/EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatform.c
index e777b0f7f7ed..90ac9d36d5e9 100644
--- a/EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatform.c
+++ b/EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatform.c
@@ -404,15 +404,16 @@ InstallFdt (
     goto Error;
   }

-  // Check the FDT header is valid. We only make this check in DEBUG mode in
-  // case the FDT header change on production device and this ASSERT() becomes
-  // not valid.
-  ASSERT (fdt_check_header ((VOID*)(UINTN)FdtBlobBase) == 0);
-
   //
-  // Ensure the Size of the Device Tree is smaller than the size of the read 
file
+  // Ensure that the FDT header is valid and that the Size of the
+ Device Tree  // is smaller than the size of the read file
   //
-  ASSERT ((UINTN)fdt_totalsize ((VOID*)(UINTN)FdtBlobBase) <= FdtBlobSize);
+  if (fdt_check_header ((VOID*)(UINTN)FdtBlobBase) != 0 ||
+      (UINTN)fdt_totalsize ((VOID*)(UINTN)FdtBlobBase) > FdtBlobSize) {
+    DEBUG ((EFI_D_ERROR, "InstallFdt() - loaded FDT binary image seems 
corrupt\n"));
+    Status = EFI_LOAD_ERROR;
+    goto Error;
+  }

   //
   // Store the FDT as Runtime Service Data to prevent the Kernel from
--
1.9.1


-- IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium.  Thank you.

ARM Limited, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, Registered 
in England & Wales, Company No:  2557590
ARM Holdings plc, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, 
Registered in England & Wales, Company No:  2548782


------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to