mirror of https://github.com/acidanthera/audk.git
OvmfPkg/QemuVideoDxe: avoid arithmetic on null pointer
The real mode interrupt vector table, which we modify for the sake of Windows 7, starts at address 0, which happens to be the representation of null pointers on all edk2 architectures. A null pointer may never undergo pointer arithmetic, and RH covscan justifiedly reports: > Error: CPPCHECK_WARNING (CWE-682): > edk2-89910a39dcfd/OvmfPkg/QemuVideoDxe/VbeShim.c:105: > error[nullPointerArithmetic]: Pointer addition with NULL pointer. > # 103| // > # 104| Segment0Pages = 1; > # 105|-> Int0x10 = (IVT_ENTRY *)(UINTN)Segment0 + 0x10; > # 106| Segment0AllocationStatus = gBS->AllocatePages ( > # 107| AllocateAddress, Fix this by calculating the EFI_PHYSICAL_ADDRESS of IVT entry 0x10 first, and by casting the address to the right type second. Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Jordan Justen <jordan.l.justen@intel.com> Bugzilla: https://bugzilla.tianocore.org/show_bug.cgi?id=1710 Issue: scan-1002.txt Signed-off-by: Laszlo Ersek <lersek@redhat.com> Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
This commit is contained in:
parent
933f1990f5
commit
52d229238b
|
@ -96,7 +96,7 @@ InstallVbeShim (
|
||||||
// The allocation request may fail, eg. if LegacyBiosDxe has already run.
|
// The allocation request may fail, eg. if LegacyBiosDxe has already run.
|
||||||
//
|
//
|
||||||
Segment0Pages = 1;
|
Segment0Pages = 1;
|
||||||
Int0x10 = (IVT_ENTRY *)(UINTN)Segment0 + 0x10;
|
Int0x10 = (IVT_ENTRY *)(UINTN)(Segment0 + 0x10 * sizeof (IVT_ENTRY));
|
||||||
Segment0AllocationStatus = gBS->AllocatePages (
|
Segment0AllocationStatus = gBS->AllocatePages (
|
||||||
AllocateAddress,
|
AllocateAddress,
|
||||||
EfiBootServicesCode,
|
EfiBootServicesCode,
|
||||||
|
|
Loading…
Reference in New Issue