]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/HiiImage: Fix stack overflow when corrupted BMP is parsed (CVE-2018... edk2-stable201903
authorRay Ni <ray.ni@intel.com>
Thu, 7 Mar 2019 10:35:14 +0000 (18:35 +0800)
committerLiming Gao <liming.gao@intel.com>
Fri, 8 Mar 2019 15:44:59 +0000 (23:44 +0800)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1135

For 4bit BMP, there are only 2^4 = 16 colors in the palette.
But when a corrupted BMP contains more than 16 colors in the palette,
today's implementation wrongly copies all colors to the local
PaletteValue[16] array which causes stack overflow.

The similar issue also exists in the logic to handle 8bit BMP.

The patch fixes the issue by only copies the first 16 or 256 colors
in the palette depending on the BMP type.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ray Ni <ray.ni@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
MdeModulePkg/Universal/HiiDatabaseDxe/Image.c

index 80a4ec11148d61337e6f4a640b8972250c57656b..8532f272eb54da2255a798433656e94e883b157d 100644 (file)
@@ -370,7 +370,7 @@ Output4bitPixel (
   PaletteNum = (UINT16)(Palette->PaletteSize / sizeof (EFI_HII_RGB_PIXEL));\r
 \r
   ZeroMem (PaletteValue, sizeof (PaletteValue));\r
-  CopyRgbToGopPixel (PaletteValue, Palette->PaletteValue, PaletteNum);\r
+  CopyRgbToGopPixel (PaletteValue, Palette->PaletteValue, MIN (PaletteNum, ARRAY_SIZE (PaletteValue)));\r
   FreePool (Palette);\r
 \r
   //\r
@@ -447,7 +447,7 @@ Output8bitPixel (
   CopyMem (Palette, PaletteInfo, PaletteSize);\r
   PaletteNum = (UINT16)(Palette->PaletteSize / sizeof (EFI_HII_RGB_PIXEL));\r
   ZeroMem (PaletteValue, sizeof (PaletteValue));\r
-  CopyRgbToGopPixel (PaletteValue, Palette->PaletteValue, PaletteNum);\r
+  CopyRgbToGopPixel (PaletteValue, Palette->PaletteValue, MIN (PaletteNum, ARRAY_SIZE (PaletteValue)));\r
   FreePool (Palette);\r
 \r
   //\r