On Fri, Feb 14, 2025 at 09:04:07PM +0530, Ani Sinha wrote:
> VM firmware update is a mechanism where the virtual machines can use their
> preferred and trusted firmware image in their execution environment without
> having to depend on a untrusted party to provide the firmware bundle. This is
> particularly useful for confidential virtual machines that are deployed in the
> cloud where the tenant and the cloud provider are two different entities. In
> this scenario, virtual machines can bring their own trusted firmware image
> bundled as a part of their filesystem (using UKIs for example[1]) and then use
> this hypervisor interface to update to their trusted firmware image. This also
> allows the guests to have a consistent measurements on the firmware image.

Works nicely for me.  Test case:
  https://kraxel.gitlab.io/uefi-tools-rs/seabios.efi

> +Fw-cfg Files
> +************
> +
> +Guests drive vmfwupdate through special ``fw-cfg`` files that control its 
> flow
> +followed by a standard system reset operation. When vmfwupdate is available,
> +it provides the following ``fw-cfg`` files:
> +
> +* ``vmfwupdate/cap`` (``u64``) - Read-only Little Endian encoded bitmap of 
> additional
> +* ``vmfwupdate/bios-size`` (``u64``) - Little Endian encoded size of the 
> BIOS region.
> +* ``vmfwupdate/opaque`` (``4096 bytes``) - A 4 KiB buffer that survives the 
> BIOS replacement
> +* ``vmfwupdate/disable`` (``u8``) - Indicates whether the interface is 
> disabled.
> +* ``vmfwupdate/bios-addr`` (``u64``) - A 64bit Little Endian encoded guest 
> physical address

This is out of sync with the actual code (vmfwupdate/bios-addr does not
exist there).

Also this adds five fw_cfg files.  Given that the number of fw_cfg files
we can have is limited I'm not convinced this is the best idea to move
forward.

Alternatives I see:

 (1) Place everything in a single fw_cfg file.  ramfb does this for
     example, the guest writes a struct with a bunch of values.

 (2) Go for a mmio register interface.  The EFI variable store I'm
     working on does this.  fw_cfg is used for hardware discovery,
     via etc/hardware-info file (which can carry entries for multiple
     devices).

See https://lore.kernel.org/qemu-devel/20250219071431.50626-2-kra...@redhat.com/
and 
https://lore.kernel.org/qemu-devel/20250219071431.50626-21-kra...@redhat.com/
(v4 has a double-free bug in patch #1 which will be fixed in v5 of the
series).

take care,
  Gerd


Reply via email to