Acidanthera UEFI Development Kit based on EDK II edk2-stable202311
Go to file
Ard Biesheuvel 51bb05c795 ArmVirtPkg/QemuVirtMemInfoLib: trim the MMIO region mapping
QEMU/mach-virt is rather unhelpful when it comes to tracking down
NULL pointer dereferences that occur while running in UEFI: since
we have NOR flash mapped at address 0x0, inadvertent reads go
unnoticed, and even most writes are silently dropped, unless you're
unlucky and the instruction in question is one that KVM cannot
emulate, in which case you end up with a QEMU crash like this:

  error: kvm run failed Function not implemented
   PC=000000013f7ff804 X00=000000013f7ab108 X01=0000000000000064
  X02=000000013f801988 X03=00000000800003c4 X04=0000000000000000
  X05=0000000096000044 X06=fffffffffffd8270 X07=000000013f7ab4a0
  X08=0000000000000001 X09=000000013f803b88 X10=000000013f7e88d0
  X11=0000000000000009 X12=000000013f7ab554 X13=0000000000000008
  X14=0000000000000002 X15=0000000000000000 X16=0000000000000000
  X17=0000000000000000 X18=0000000000000000 X19=0000000000000000
  X20=000000013f81c000 X21=000000013f7ab170 X22=000000013f81c000
  X23=0000000009000018 X24=000000013f407020 X25=000000013f81c000
  X26=000000013f803530 X27=000000013f802000 X28=000000013f7ab270
  X29=000000013f7ab0d0 X30=000000013f7fee10  SP=000000013f7a6f30
  PSTATE=800003c5 N--- EL1h

and a warning in the host kernel log that load/store instruction
decoding is not supported by KVM.

Given that the first page of the flash device is not actually
used anyway, let's reduce the mappings of the peripheral space
and the flash device (both of which cover page #0) to only cover
what is actually required:

  ArmVirtQemu.fdf:
  > 0x00001000|0x001ff000
  > gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize

  ArmVirtQemuKernel.fdf:
  > 0x00008000|0x001f8000
  > gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize

For ArmVirtQemu, the resulting virtual mapping looks roughly like:
- [0, 4K)       : flash, unmapped
- [4K, 2M)      : flash, mapped as WB+X RAM
- [2M, 64M)     : flash, unmapped
- [64M, 128M)   : varstore flash, will be mapped by the NOR flash driver
- [128M, 256M)  : peripherals, mapped as device
- [256M, 1GB)   : 32-bit MMIO aperture, translated IO aperture, ECAM,
                  will be mapped by the PCI host bridge driver
- [1GB, ...)    : RAM, mapped.

After this change, any inadvertent read or write from/to the first
physical page will trigger a translation fault inside the guest,
regardless of the nature of the instruction, without crashing QEMU.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
2018-12-03 15:56:39 +01:00
AppPkg AppPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:35 +08:00
ArmPkg ArmPkg/ArmMmuLib ARM: handle unmapped sections when updating permissions 2018-12-03 15:55:35 +01:00
ArmPlatformPkg ArmPlatformPkg/PlatformPei: drop unused PCD references 2018-11-29 18:57:39 +01:00
ArmVirtPkg ArmVirtPkg/QemuVirtMemInfoLib: trim the MMIO region mapping 2018-12-03 15:56:39 +01:00
BaseTools BaseTools Script: Update ConvertFceToStructurePcd to report warning messages 2018-11-29 08:30:52 +08:00
BeagleBoardPkg BeagleBoardPkg/PrePi: base GCD memory space size on CPU's PA range 2018-11-29 18:57:31 +01:00
Conf
CorebootModulePkg CorebootModulePkg: Removing ipf from edk2. 2018-08-14 08:58:28 +08:00
CorebootPayloadPkg CorebootPayloadPkg: Remove EdkShellBinPkg in FDF 2018-11-05 13:58:24 +08:00
CryptoPkg CryptoPkg/BaseCryptLib: Fix potential integer overflow issue. 2018-10-31 11:07:53 +08:00
DuetPkg DuetPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:38 +08:00
EdkCompatibilityPkg EdkCompatibilityPkg: Removing ipf from edk2. 2018-09-25 23:43:46 +08:00
EmbeddedPkg EmbeddedPkg/EmbeddedPkg.dec: drop PcdPrePiCpuMemorySize declarations 2018-11-30 22:43:20 +01:00
EmulatorPkg EmulatorPkg: Remove EdkShellBinPkg in FDF and DEC 2018-11-19 10:50:15 +08:00
FatPkg FatPkg: Correct the line ending to CRLF 2018-10-24 15:22:31 +08:00
FmpDevicePkg FmpDevicePkg DSC: Add NOOPT target to verify NOOPT target 2018-10-31 22:08:10 +08:00
IntelFrameworkModulePkg IntelFrameworkModulePkg: Fix UEFI and Tiano Decompression logic issue 2018-11-11 11:48:37 +08:00
IntelFrameworkPkg IntelFrameworkPkg FrameworkUefiLib: Add new EfiLocateXXXAcpiTable APIs 2018-09-27 14:25:32 +08:00
IntelFsp2Pkg IntelFsp2Pkg: Fixed potentially NULL pointer accessing 2018-10-29 11:24:58 +08:00
IntelFsp2WrapperPkg IntelFsp2WrapperPkg: Fix constant if statements issue 2018-11-26 11:40:38 +08:00
IntelFspPkg edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
IntelFspWrapperPkg edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
IntelSiliconPkg IntelSiliconPkg VTdDxe: Report status code for VTd error 2018-10-25 11:50:49 +08:00
MdeModulePkg MdeModulePkg: Correct PCD name in MdeModulePkg.uni 2018-12-03 08:29:26 +08:00
MdePkg MdePkg/ProcessorBind.h AARCH64: limit MAX_ADDRESS to 48 bits 2018-11-29 18:53:22 +01:00
NetworkPkg NetworkPkg/IScsiDxe: add debug logs for failed SetVariable attempts 2018-11-23 14:27:11 +08:00
Nt32Pkg Nt32Pkg: Remove EdkShellBinPkg in FDF and DEC 2018-11-19 10:50:15 +08:00
Omap35xxPkg Omap35xxPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:46 +08:00
OptionRomPkg OptionRomPkg: Removing ipf which is no longer supported from edk2. 2018-09-06 14:44:30 +08:00
OvmfPkg OvmfPkg: Don't include TftpDynamicCommand in XCODE5 tool chain 2018-11-27 11:21:15 +08:00
PcAtChipsetPkg PcAtChipsetPkg PcRtc: Use new EfiLocateFirstAcpiTable() 2018-09-27 14:25:35 +08:00
QuarkPlatformPkg QuarkPlatformPkg: Removing ipf which is no longer supported from edk2. 2018-08-14 08:58:30 +08:00
QuarkSocPkg QuarkSocPkg: Removing ipf which is no longer supported from edk2. 2018-08-14 08:58:32 +08:00
SecurityPkg SecurityPkg: Update TCG PFP spec revision. 2018-11-21 10:06:36 +08:00
ShellBinPkg ShellBinPkg: Clean up source files 2018-06-28 11:19:51 +08:00
ShellPkg ShellPkg: Remove ShellPkg wrapper header files 2018-11-22 14:24:23 +08:00
SignedCapsulePkg SignedCapsulePkg: Remove PalLib in dsc which was missed at 52664c5 2018-09-25 23:40:40 +08:00
SourceLevelDebugPkg SourceLevelDebugPkg/Readme.txt: Update UDK Debugger Tool & manual URL 2018-11-08 12:00:34 +08:00
StandaloneMmPkg StandaloneMmPkg: Describe the declaration and definition files. 2018-07-20 10:59:56 +08:00
StdLib StdLib: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:51 +08:00
StdLibPrivateInternalFiles StdLibPrivateInternalFiles: Removing ipf from edk2. 2018-06-29 16:19:51 +08:00
UefiCpuPkg UefiCpuPkg/CommonFeature: Always set FEATURE_CONTROL.Lock 2018-11-14 11:02:48 +08:00
Vlv2DeviceRefCodePkg edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
Vlv2TbltDevicePkg Vlv2TbltDevicePkg:Fix build and boot failure of Minnowboard Max platform. 2018-11-23 13:58:28 +08:00
.gitignore edk2: Add .DS_Store to .gitignore for macOS 2017-05-19 15:14:34 -07:00
.gitmodules CryptoPkg: Adding OpenSSL as one submodule of EDKII repo 2018-01-18 14:06:15 +08:00
BuildNotes2.txt BaseTools: Updated BuildNotes URLs 2016-03-25 09:46:44 +08:00
Contributions.txt edk2: Fix typo in Contributions.txt 2017-08-16 17:50:44 +08:00
License.txt edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
Maintainers.txt Maintainers.txt: Update MdeModulePkg maintainers 2018-11-29 09:32:54 +08:00
Readme.md edk2: Add Readme.md to root of edk2 repository 2017-08-03 11:02:25 -07:00
edksetup.bat BaseTools: Fix incorrect %EDK_TOOLS_PATH% 2018-08-08 08:44:22 +08:00
edksetup.sh Revert BaseTools: PYTHON3 migration 2018-10-15 08:29:14 +08:00

Readme.md

EDK II Project

A modern, feature-rich, cross-platform firmware development environment for the UEFI and PI specifications from www.uefi.org.

Contributions to the EDK II open source project are covered by the TianoCore Contribution Agreement 1.1

The majority of the content in the EDK II open source project uses a BSD 2-Clause License. The EDK II open source project contains the following components that are covered by additional licenses:

The EDK II Project is composed of packages. The maintainers for each package are listed in Maintainers.txt.

Resources