]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Enhance the check for debug data before get the PdbPointer.
authorydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 26 Nov 2012 01:53:31 +0000 (01:53 +0000)
committerydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 26 Nov 2012 01:53:31 +0000 (01:53 +0000)
Signed-off-by: Dong Eric <eric.dong@intel.com>
Reviewed-by: Ye Ting <ting.ye@intel.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13961 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Library/BasePeCoffLib/BasePeCoff.c

index c404054045c1714db2dcd12033b6c9b8e105283b..27b130d42ecae25ee63555d393c9458b309be5e9 100644 (file)
@@ -631,6 +631,12 @@ PeCoffLoaderGetImageInfo (
             }\r
             return Status;\r
           }\r
+\r
+          //\r
+          // From PeCoff spec, when DebugEntry.RVA == 0 means this debug info will not load into memory.\r
+          // Here we will always load EFI_IMAGE_DEBUG_TYPE_CODEVIEW type debug info. so need adjust the\r
+          // ImageContext->ImageSize when DebugEntry.RVA == 0.\r
+          //\r
           if (DebugEntry.Type == EFI_IMAGE_DEBUG_TYPE_CODEVIEW) {\r
             ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index);\r
             if (DebugEntry.RVA == 0 && DebugEntry.FileOffset != 0) {\r
@@ -1437,14 +1443,26 @@ PeCoffLoaderLoadImage (
 \r
         switch (*(UINT32 *) ImageContext->CodeView) {\r
         case CODEVIEW_SIGNATURE_NB10:\r
+          if (DebugEntry->SizeOfData < sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY)) {\r
+            ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;\r
+            return RETURN_UNSUPPORTED;\r
+          }\r
           ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY);\r
           break;\r
 \r
         case CODEVIEW_SIGNATURE_RSDS:\r
+          if (DebugEntry->SizeOfData < sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY)) {\r
+            ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;\r
+            return RETURN_UNSUPPORTED;\r
+          }\r
           ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY);\r
           break;\r
 \r
         case CODEVIEW_SIGNATURE_MTOC:\r
+          if (DebugEntry->SizeOfData < sizeof (EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY)) {\r
+            ImageContext->ImageError = IMAGE_ERROR_UNSUPPORTED;\r
+            return RETURN_UNSUPPORTED;\r
+          }\r
           ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY);\r
           break;\r
 \r