mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/HiiImage: Fix stack overflow when corrupted BMP is parsed (CVE-2018-12181)
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>
This commit is contained in:
parent
ffe5f7a6b4
commit
89910a39dc
|
@ -370,7 +370,7 @@ Output4bitPixel (
|
|||
PaletteNum = (UINT16)(Palette->PaletteSize / sizeof (EFI_HII_RGB_PIXEL));
|
||||
|
||||
ZeroMem (PaletteValue, sizeof (PaletteValue));
|
||||
CopyRgbToGopPixel (PaletteValue, Palette->PaletteValue, PaletteNum);
|
||||
CopyRgbToGopPixel (PaletteValue, Palette->PaletteValue, MIN (PaletteNum, ARRAY_SIZE (PaletteValue)));
|
||||
FreePool (Palette);
|
||||
|
||||
//
|
||||
|
@ -447,7 +447,7 @@ Output8bitPixel (
|
|||
CopyMem (Palette, PaletteInfo, PaletteSize);
|
||||
PaletteNum = (UINT16)(Palette->PaletteSize / sizeof (EFI_HII_RGB_PIXEL));
|
||||
ZeroMem (PaletteValue, sizeof (PaletteValue));
|
||||
CopyRgbToGopPixel (PaletteValue, Palette->PaletteValue, PaletteNum);
|
||||
CopyRgbToGopPixel (PaletteValue, Palette->PaletteValue, MIN (PaletteNum, ARRAY_SIZE (PaletteValue)));
|
||||
FreePool (Palette);
|
||||
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue