Commit Graph

2720 Commits

Author SHA1 Message Date
Oliver Smith-Denny 30547859f2 OvmfPkg: OvmfIA32X64: Add Custom Stack Cookie Checking
To provide an example and test the code within edk2, this
adds stack cookie checking to OvmfIA32X64, doing no checking
for SEC and PEI_CORE modules, static cookies for PEIMs, and
dynamic cookies for all other module types.

Signed-off-by: Oliver Smith-Denny <osde@linux.microsoft.com>
2025-02-07 02:23:11 +00:00
Oliver Smith-Denny 6d741357c2 OvmfPkg: Add RDRAND Support To QEMU
In order to use dynamic stack cookies, we need RDRAND support
from QEMU, so this updates the QEMU launching code for OvmfPkg
to include RDRAND support.

Signed-off-by: Oliver Smith-Denny <osde@linux.microsoft.com>
2025-02-07 02:23:11 +00:00
Oliver Smith-Denny efbf5ed08c MdePkg: Move StackCheckLibStaticInit to StackCheckLib
This commit oves StackCheckLib from a NULL lib to an instance of
StackCheckLib. This requires every entry point to add a library
dependency on StackCheckLib. It also requires every SEC module
to have a dependency on StackCheckLib because there is no
standard SEC entry point.

It allows for greater flexibility for a platform to apply stack
cookies and simplifies DSC logic.

Continuous-integration-options: PatchCheck.ignore-multi-package

Signed-off-by: Oliver Smith-Denny <osde@microsoft.com>
2025-02-07 02:23:11 +00:00
Mike Maslenkin 755d4b9397 OvmfPkg: fix warning about uninitialized variable
GenericQemuLoadImageLib.c: In function 'QemuLoadKernelImage':
GenericQemuLoadImageLib.c:323:5: error: 'CommandLine' may be used
  uninitialized in this function [-Werror=maybe-uninitialized]
     UnicodeSPrintAsciiFormat (
     ^~~~~~~~~~~~~~~~~~~~~~~~~~
       KernelLoadedImage->LoadOptions,
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       KernelLoadedImage->LoadOptionsSize,
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       "%a%a",
       ~~~~~~~
       (CommandLineSize == 0) ?  "" : CommandLine,
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       (InitrdSize == 0)      ?  "" : " initrd=initrd"
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       );
       ~
cc1: all warnings being treated as errors

Signed-off-by: Mike Maslenkin <mike.maslenkin@gmail.com>
2025-01-29 17:20:57 +01:00
Gerd Hoffmann bba72ffbe1 OvmfPkg/QemuKernelLoaderFsDxe: use SIZE_OF_EFI_FILE_INFO
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-28 23:28:45 +00:00
Gerd Hoffmann 18984b68fe OvmfPkg: make legacy direct kernel loader code nx clean
kernel pages are code not data.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-27 22:59:55 +00:00
Anthony PERARD 8c1e786e50 OvmfPkg/XenPvBlkDxe: Update disk size calculation
The specification wasn't clear and even contradict itself regarding
the calculation of the disk size. This have been clarified by Xen
commit 221f2748e8da ("blkif: reconcile protocol specification with
in-use implementations").

https://xenbits.xenproject.org/gitweb/?p=xen.git;a=commit;h=221f2748e8dabe8361b8cdfcffbeab9102c4c899

The value from the xenstore node "sectors" must be multiplied by 512
to have the size of the disk.

Calculation of LastBlock is now the same for both CD-ROM case and
generic case.

Signed-off-by: Anthony PERARD <anthony.perard@vates.tech>
2025-01-27 14:37:53 +00:00
Anthony PERARD 3cf7a644eb OvmfPkg/IndustryStandard/Xen: Update io/blkif.h
Import the latest version of blkif.h header from Xen.

Signed-off-by: Anthony PERARD <anthony.perard@vates.tech>
2025-01-27 14:37:53 +00:00
Gerd Hoffmann 1f19c3d6ee OvmfPkg/GenericQemuLoadImageLib: fix cmdline + initrd handling
Commit 459f5ffa24 ("OvmfPkg/QemuKernelLoaderFsDxe: rework direct
kernel boot filesystem") has a small change in behavior:  In case
there is no data the file is not created and attempts to open file
return EFI_NOT_FOUND.  Old behavior was to add a zero-length file
to the filesystem.

Fix GenericQemuLoadImageLib to handle EFI_NOT_FOUND correctly for
'initrd' and 'cmdline'.

Reported-by: Srikanth Aithal <sraithal@amd.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-24 18:26:37 +00:00
Gerd Hoffmann b873e8b8e3 OvmfPkg/QemuKernelLoaderFsDxe: root directory name should be ""
UEFI spec says so, fix it.

https://uefi.org/specs/UEFI/2.11/13_Protocols_Media_Access.html#efi-file-info

Reported-by: Laszlo Ersek <laszlo.ersek@posteo.net>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-24 17:12:07 +00:00
Anthony PERARD 99cbb63652 OvmfPkg/OvmfXen: use PeiPcdLib for PEI_CORE
Commit d64d1e195c ("MdeModulePkg: PeiMain: Introduce implementation
of delayed dispatch") introduced a new usage of the TimerLib which
uses a dynamic PCD in OvmfXen platform. But PeiMain has only access to
a NULL version of PcdLib, so OvmfXen can't start.

Introduce PeiPcdLib for PEI_CORE so PeiMain can read dynamic PCDs.

Signed-off-by: Anthony PERARD <anthony.perard@vates.tech>
2025-01-24 12:57:59 +00:00
Heinrich Schuchardt feb8d49834 OvmfPkg/RiscVVirtQemu.dsc: enable VGA support
QEMU enables VIRTIO_VGA by default.

Libvirt falls back from virtio-gpu-pci to virtio-vga if made available by
QEMU.

We need to enable VGA support to get video output for EDK II in
virt-manager.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
2025-01-23 12:43:11 +00:00
Gerd Hoffmann 35232f165c OvmfPkg: document opt/org.tianocore/EnableLegacyLoader option
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-21 13:45:46 +01:00
Gerd Hoffmann 1549bf11cc OvmfPkg/X86QemuLoadImageLib: make legacy loader configurable.
Add the 'opt/org.tianocore/EnableLegacyLoader' FwCfg option to
enable/disable the insecure legacy linux kernel loader.

For now this is enabled by default.  Probably the default will be
flipped to disabled at some point in the future.

Also print a warning to the screen in case the linux kernel secure
boot verification has failed.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-21 13:45:46 +01:00
Gerd Hoffmann 4b507b4966 OvmfPkg/GenericQemuLoadImageLib: support booting via shim
Try load shim first.  In case that succeeded update the command line to
list 'kernel' first so shim will fetch the kernel from the kernel loader
file system.

This allows to use direct kernel boot with distro kernels and secure
boot enabled.  Usually distro kernels can only be verified by distro
shim using the distro keys compiled into the shim binary.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-21 13:45:46 +01:00
Gerd Hoffmann 3da39f2cb6 OvmfPkg/X86QemuLoadImageLib: support booting via shim
Try load shim first.  In case that succeeded update the command line to
list 'kernel' first so shim will fetch the kernel from the kernel loader
file system.

This allows to use direct kernel boot with distro kernels and secure
boot enabled.  Usually distro kernels can only be verified by distro
shim using the distro keys compiled into the shim binary.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-21 13:45:46 +01:00
Gerd Hoffmann c45051450e OvmfPkg/QemuKernelLoaderFsDxe: don't quit when named blobs are present
Allows to use the qemu kernel loader pseudo file system for other
purposes than loading a linux kernel (or efi binary).  Passing
startup.nsh for EFI shell is one example.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-21 13:45:46 +01:00
Gerd Hoffmann 46ae4e4b95 OvmfPkg/QemuKernelLoaderFsDxe: accept absolute paths
EFI shell looks for "\startup.nsh".
Try "-fw_cfg name=etc/boot/startup.nsh,string='echo hello'" ;)

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-21 13:45:46 +01:00
Gerd Hoffmann 1111e9fe70 OvmfPkg/QemuKernelLoaderFsDxe: drop bogus assert
Triggers when trying to get root directory info.
Reproducer:
 * Use qemu -kernel with something edk2 can not load.
 * When dropped into the efi shell try inspect the file system.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-21 13:45:46 +01:00
Gerd Hoffmann adf385ecab OvmfPkg/QemuKernelLoaderFsDxe: allow longer file names
QEMU_FW_CFG_FNAME_SIZE is 56. 'etc/boot/' prefix is minus 9.  Add one
for the terminating '\0'.  Effective max size is 48.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-21 13:45:46 +01:00
Gerd Hoffmann 20df7c42bd OvmfPkg/QemuKernelLoaderFsDxe: add support for named blobs
Load all named fw_cfg blobs with "etc/boot/" prefix into the pseudo
filesystem.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-21 13:45:46 +01:00
Gerd Hoffmann 459f5ffa24 OvmfPkg/QemuKernelLoaderFsDxe: rework direct kernel boot filesystem
Split KERNEL_BLOB struct into two:

 * One (KERNEL_BLOB_ITEMS) static array describing how to load (unnamed)
   blobs from fw_cfg.
 * And one (KERNEL_BLOB) dynamically allocated linked list carrying the
   data blobs for the pseudo filesystem.

Also add some debug logging.  Prefix most functions with 'QemuKernel'
for consistency and easier log file grepping.  Add some small helper
functions.

This refactoring prepares for loading blobs in other ways.
No (intentional) change in filesystem protocol behavior.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-21 13:45:46 +01:00
Gerd Hoffmann f9a0e54953 OvmfPkg/OvmfDisplayPcds.dsc.inc: set SetupConOut too
Setting PcdSetupConOut* to zero turns on autodetection mode
for rows and cols, so the firmware setup application will use
the use complete available screen space.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-20 11:43:58 +00:00
Gerd Hoffmann df35307196 OvmfPkg/OvmfDisplayPcds.dsc.inc: set SetupVideoResolution too
Set both PcdVideo*Resolution and PcdSetupVideo*Resolution PCDs.

This avoids pointless video mode changes when entering and leaving
the firmware setup application.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-20 11:43:58 +00:00
Gerd Hoffmann fde034447f OvmfPkg/PlatformDxe: set SetupVideoResolution too
Set both PcdVideo*Resolution and PcdSetupVideo*Resolution PCDs.

This avoids pointless video mode changes when entering and leaving
the firmware setup application.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-20 11:43:58 +00:00
Gerd Hoffmann b4536e36c4 OvmfPkg/VirtioGpuDxe: set SetupVideoResolution too
Set both PcdVideo*Resolution and PcdSetupVideo*Resolution PCDs.

This avoids pointless video mode changes when entering and leaving
the firmware setup application.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-20 11:43:58 +00:00
Gerd Hoffmann 1d2558af76 OvmfPkg/QemuVideoDxe: set SetupVideoResolution too
Set both PcdVideo*Resolution and PcdSetupVideo*Resolution PCDs.

This avoids pointless video mode changes when entering and leaving
the firmware setup application.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-20 11:43:58 +00:00
Gerd Hoffmann 2b72a70cd1 OvmfPkg/RiscVVirtQemu.dsc: use OvmfDisplayPcds.dsc.inc
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-20 11:43:58 +00:00
Gerd Hoffmann 787450af9c OvmfPkg/OvmfXen.dsc: use OvmfDisplayPcds.dsc.inc
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-20 11:43:58 +00:00
Gerd Hoffmann c3427ae439 OvmfPkg: move display pcds to OvmfDisplayPcds.dsc.inc include file
This way we have the display configuration in a single place and
need to change one file only to update all build variants.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-20 11:43:58 +00:00
Mike Beaton 076ef39ba2 OvmfPkg: Use OvmfPkg/Include/*/Shell*.inc throughout
While fixing https://github.com/tianocore/edk2/pull/6092 (the
fact that some OvmfPkg and ArmVirtPkg platforms included residual
NetworkPkg components even when compiled with -D NETWORK_ENABLE=0),
it was noted that OvmfPkg/Include/*/Shell*.inc files which apply
the required fix logic are available and already used in some
OvmfPkg platforms.

This commit applies these files consistently within OvmfPkg.

This has the side effect that some platforms now include one or
more of HttpDynamicCommand, VariablePolicyDynamicCommand and
LinuxInitrdDynamicShellCommand when they previously did not.
This fixes unintentional drift between platforms, and provides
additional shell commands which may be useful in some cases.

Signed-off-by: Mike Beaton <mjsbeaton@gmail.com>
2025-01-16 23:06:40 +00:00
Mike Beaton 9a21320361 OvmfPkg: Include no network components with -D NETWORK_ENABLE=0
This issue showed up when addressing
https://bugzilla.tianocore.org/show_bug.cgi?id=4829
in https://github.com/tianocore/edk2/pull/6087 .

Various OvmfPkg and ArmVirtPkg platforms include some residual NetworkPkg
components when compiled with -D NETWORK_ENABLE=0, even though they use
NetworkPkg includes intended to allow all NetworkPkg components to be
disabled on this flag.

For the OvmfPkg Intel platforms only, commit
d933ec115b started
the change of not including these residual NetworkPkg
components, and commit
7f17a15564 completed it.

This commit rolls these changes out to the remaining OvmfPkg platforms
where they make sense in the same way.

Signed-off-by: Mike Beaton <mjsbeaton@gmail.com>
2025-01-16 23:06:40 +00:00
Gerd Hoffmann d6f828b384 OvmfPkg/MicroVM: use PeiPcdLib for PEI_CORE
Since commit d64d1e195c ("MdeModulePkg: PeiMain: Introduce
implementation of delayed dispatch") the pei core wants read PCDs, so
the NULL lib doesn't cut it any more.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2025-01-15 07:55:41 +00:00
Praveen K Paladugu f2a8bb9dfb CloudHv: Disable PcdFirstTimeWakeUpAPsBySipi
Disable PcdFirstTimeWakeUpAPsBySipi to use INIT-SIPI-SIPI sequence to
wakeup APs.

Signed-off-by: Praveen K Paladugu <prapal@linux.microsoft.com>
2025-01-14 12:25:56 +00:00
Tom Lendacky 8b87eb9dfb OvmfPkg: Use the OvmfPkg version of CcProbeLib
Currently, multiple dsc files within the OvmfPkg directory use the NULL
version of the CcProbeLib library. However, these packages have support
for confidential guests (usage of CcExitLib, MemEncrypt{Sev,Tdx}Lib, etc.)
and should be using the OvmfPkg version of the CcProbeLib.

The use of the NULL library causes the PCI option ROM to be enabled, which
can't be trusted as it originates from the hypervisor. The use of the NULL
library also causes a KVM hypervisor error when attempting to map/back the
option ROM region when running an SEV-SNP guest.

Update the various dsc files to reference the OvmfPkg version of the
CcProbeLib library and prevent usage of PCI option ROMs.

Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
2025-01-13 16:27:23 +00:00
Ceping Sun d51baa02a6 OvmfPkg: Update with TdxMeasurementLib
Since the tdx measurement APIs are implemented by
TdxMeasurementLib, the duplicate code are removed.

Cc: Erdem Aktas <erdemaktas@google.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Min Xu <min.m.xu@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Elena Reshetova <elena.reshetova@intel.com>
Signed-off-by: Min Xu <min.m.xu@intel.com>
Signed-off-by: Ceping Sun <cepingx.sun@intel.com>
2025-01-13 09:38:39 +00:00
Ceping Sun 6f73428d06 OvmfPkg: Implement TdxMeasurementLib
Add below APIs implementation that copied from TdxHelperLib.
- TdxMeasurementMapPcrToMrIndex
- TdxMeasurementHashAndExtendToRtmr
- TdxMeasurementBuildGuidHob

Cc: Erdem Aktas <erdemaktas@google.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Min Xu <min.m.xu@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Elena Reshetova <elena.reshetova@intel.com>
Signed-off-by: Min Xu <min.m.xu@intel.com>
Signed-off-by: Ceping Sun <cepingx.sun@intel.com>
2025-01-13 09:38:39 +00:00
Khor Swee Aun c0533b7e22 OvmfPkg/SmmCpuPlatformHookLibQemu: Define IsCpuSyncAlwaysNeeded
This patch is to implement default IsCpuSyncAlwaysNeeded definition
for SmmCpuPlatformHookLibQemu. This interface will determine whether the first
CPU Synchronization should be executed unconditionally when a SMI occurs.

If the function returns true, it indicates that there is no need to check the system
configuration and status, and the first CPU Synchronization should be executed
unconditionally.

If the function returns false, it indicates that the first CPU Synchronization is
not executed unconditionally, and the decision to synchronize should be based on
the system configuration and status.

Signed-off-by: Khor Swee Aun <swee.aun.khor@intel.com>
2025-01-10 07:45:26 +00:00
Pedro Tôrres f6e19abd97 OvmfPkg/VirtioSerialDxe: respond CONSOLE_PORT with PORT_OPEN
The VirtIO spec states that "Upon receipt of a
VIRTIO_CONSOLE_CONSOLE_PORT message, the driver SHOULD treat the port in
a manner suitable for text console access and MUST respond with a
VIRTIO_CONSOLE_PORT_OPEN message, which MUST have value set to 1". See
https://docs.oasis-open.org/virtio/virtio/v1.3/virtio-v1.3.html#x1-3330002.

The current driver implementation, however, does not comply with that
and only sends PORT_OPEN messages upon receipt of PORT_OPEN messages.
This causes a problem in platforms like Apple's Virtualization
Framework, where PORT_OPEN messages are not sent back to the driver
after CONSOLE_PORT messages are received by the device, a behaviour that
is compliant with the VirtIO specification.

This patch addresses this issue by always responding CONSOLE_PORT
messages with PORT_OPEN messages.

Signed-off-by: Pedro Tôrres <t0rr3sp3dr0@gmail.com>
2025-01-04 15:55:02 +00:00
Paweł Poławski fc140c5eae OvmfPkg: Enable virtio keyboard driver for Ia32x64 OVMF platform
Signed-off-by: Paweł Poławski <ppolawsk@redhat.com>
2024-12-29 19:19:59 +01:00
Paweł Poławski ce4317b4c8 OvmfPkg: Enable virtio keyboard driver for X64 OVMF platform
Signed-off-by: Paweł Poławski <ppolawsk@redhat.com>
2024-12-29 19:19:59 +01:00
Paweł Poławski 8bc9f5a2bc OvmfPkg: Virtio based keyboard driver implementation
This is virtio based keyboard driver designed to be used on ARM platform.
The driver implements basic and extended text input interface.

UEFI shell requires only basic text input interface, but Grub needs
extended text input to work on.

Signed-off-by: Paweł Poławski <ppolawsk@redhat.com>
2024-12-29 19:19:59 +01:00
Paweł Poławski 0eea7b9c02 OvmfPkg: Add virtio keyboard device hooks
This commit adds:
- missing virtio subsystem ID for input device
- PrepareVirtioKeyboardDevicePath() handler to boot manager library

Signed-off-by: Paweł Poławski <ppolawsk@redhat.com>
2024-12-29 19:19:59 +01:00
Luigi Leonardi 4971459ab2 OvmfPkg: add new shell runtime config option to documentation.
Signed-off-by: Luigi Leonardi <leonardi@redhat.com>
2024-12-23 10:36:19 +00:00
Luigi Leonardi 597342b212 OvmfPkg/PlatformBootManagerLib: Optimize PlatformRegisterFvBootOption
Add a FileIsInFv check to PlatformRegisterFvBootOption, this is to
to avoid adding and then removing a boot option shortly after,
because the file is no longer in the firmware volume.

Signed-off-by: Luigi Leonardi <leonardi@redhat.com>
2024-12-23 10:36:19 +00:00
Luigi Leonardi abbd05992d OvmfPkg/PlatformBootManagerLib: Introduce FileIsInFv function.
Move out file presence check from RemoveStaleFvFileOptions
to a new helper function for reusability. No functional changes
intended.

Signed-off-by: Luigi Leonardi <leonardi@redhat.com>
2024-12-23 10:36:19 +00:00
Luigi Leonardi 103aed83a7 OvmfPkg/PlatformBootManagerLib: Introduce support for fw_cfg for UEFI Shell
usage: qemu -fw_cfg name=opt/org.tianocore/EFIShellSupport,string=no

Signed-off-by: Luigi Leonardi <leonardi@redhat.com>
2024-12-23 10:36:19 +00:00
Luigi Leonardi 07bb226542 OvmfPkg: Add a runtime switch for PlatformRegisterFvBootOption
Add a new parameter to selectively enable or disable the BootOption.

Signed-off-by: Luigi Leonardi <leonardi@redhat.com>
2024-12-23 10:36:19 +00:00
Chao Li b8f3199595 OvmfPkg/LoongArch: Enabling some base libraries
BaseCryptLib, RngLib, IntrinsicLib and OpensslLib are enabled by default
on LoongArch VM, since some APPs or OS require them.

Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Chao Li <lichao@loongson.cn>
2024-12-23 03:18:13 +00:00
Gerd Hoffmann 9ef348350a OvmfPkg: document runtime config options
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2024-12-17 12:44:11 +01:00