MdeModulePkg/SmbiosDxe: Fix pointer and buffer overflow CodeQL alerts

Details for these CodeQL alerts can be found here:

- Pointer overflow check (cpp/pointer-overflow-check):
  - https://cwe.mitre.org/data/definitions/758.html

- Potential buffer overflow check (cpp/potential-buffer-overflow):
  - https://cwe.mitre.org/data/definitions/676.html

CodeQL alert:

  - Line 1612 in MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c
    - Type: Pointer overflow check
    - Severity: Low
    - Problem: Range check relying on pointer overflow

Cc: Dandan Bi <dandan.bi@intel.com>
Cc: Erich McMillan <emcmillan@microsoft.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael Kubacki <mikuback@linux.microsoft.com>
Cc: Star Zeng <star.zeng@intel.com>
Cc: Zhichao Gao <zhichao.gao@intel.com>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Co-authored-by: Michael Kubacki <michael.kubacki@microsoft.com>
Signed-off-by: Erich McMillan <emcmillan@microsoft.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
Reviewed-by: Oliver Smith-Denny <osd@smith-denny.com>
This commit is contained in:
Erich McMillan 2022-11-08 03:23:56 +00:00 committed by mergify[bot]
parent fc00ff286a
commit 33f517445b
1 changed files with 2 additions and 6 deletions

View File

@ -1608,9 +1608,7 @@ ParseAndAddExistingSmbiosTable (
// //
// Make sure not to access memory beyond SmbiosEnd // Make sure not to access memory beyond SmbiosEnd
// //
if ((Smbios.Raw + sizeof (SMBIOS_STRUCTURE) > SmbiosEnd.Raw) || if ((UINTN)(SmbiosEnd.Raw - Smbios.Raw) < sizeof (SMBIOS_STRUCTURE)) {
(Smbios.Raw + sizeof (SMBIOS_STRUCTURE) < Smbios.Raw))
{
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }
@ -1625,9 +1623,7 @@ ParseAndAddExistingSmbiosTable (
// Make sure not to access memory beyond SmbiosEnd // Make sure not to access memory beyond SmbiosEnd
// Each structure shall be terminated by a double-null (0000h). // Each structure shall be terminated by a double-null (0000h).
// //
if ((Smbios.Raw + Smbios.Hdr->Length + 2 * sizeof (UINT8) > SmbiosEnd.Raw) || if ((UINTN)(SmbiosEnd.Raw - Smbios.Raw) < (Smbios.Hdr->Length + 2U)) {
(Smbios.Raw + Smbios.Hdr->Length + 2 * sizeof (UINT8) < Smbios.Raw))
{
return EFI_INVALID_PARAMETER; return EFI_INVALID_PARAMETER;
} }