All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/21] hw/uefi: add uefi variable service
@ 2025-01-07 15:33 Gerd Hoffmann
  2025-01-07 15:33 ` [PATCH v2 01/21] hw/uefi: add include/hw/uefi/var-service-api.h Gerd Hoffmann
                   ` (22 more replies)
  0 siblings, 23 replies; 30+ messages in thread
From: Gerd Hoffmann @ 2025-01-07 15:33 UTC (permalink / raw)
  To: qemu-devel
  Cc: Gerd Hoffmann, graf, Paolo Bonzini, Michael Roth,
	Daniel P. Berrangé, Philippe Mathieu-Daudé, Thomas Huth,
	qemu-arm, Eric Blake, Peter Maydell, Markus Armbruster,
	Marc-André Lureau

This patch adds a virtual device to qemu which the uefi firmware can use
to store variables.  This moves the UEFI variable management from
privileged guest code (managing vars in pflash) to the host.  Main
advantage is that the need to have privilege separation in the guest
goes away.

On x86 privileged guest code runs in SMM.  It's supported by kvm, but
not liked much by various stakeholders in cloud space due to the
complexity SMM emulation brings.

On arm privileged guest code runs in el3 (aka secure world).  This is
not supported by kvm, which is unlikely to change anytime soon given
that even el2 support (nested virt) is being worked on for years and is
not yet in mainline.

The design idea is to reuse the request serialization protocol edk2 uses
for communication between SMM and non-SMM code, so large chunks of the
edk2 variable driver stack can be used unmodified.  Only the driver
which traps into SMM mode must be replaced by a driver which talks to
qemu instead.

A edk2 test branch can be found here (build with "-D QEMU_VARS=TRUE").
https://github.com/kraxel/edk2/commits/devel/secure-boot-external-vars

The uefi-vars device re-implements the privileged edk2 protocols
(i.e. the code running in SMM mode).

v2 changes:
 - fully implement authenticated variables.
 - various cleanups and fixes.

enjoy & take care,
  Gerd

Gerd Hoffmann (21):
  hw/uefi: add include/hw/uefi/var-service-api.h
  hw/uefi: add include/hw/uefi/var-service-edk2.h
  hw/uefi: add include/hw/uefi/var-service.h
  hw/uefi: add var-service-guid.c
  hw/uefi: add var-service-utils.c
  hw/uefi: add var-service-vars.c
  hw/uefi: add var-service-auth.c
  hw/uefi: add var-service-policy.c
  hw/uefi: add var-service-core.c
  hw/uefi: add var-service-pkcs7.c
  hw/uefi: add var-service-pkcs7-stub.c
  hw/uefi: add var-service-siglist.c
  hw/uefi: add var-service-json.c + qapi for NV vars.
  hw/uefi: add trace-events
  hw/uefi: add UEFI_VARS to Kconfig
  hw/uefi: add to meson
  hw/uefi: add uefi-vars-sysbus device
  hw/uefi: add uefi-vars-isa device
  hw/arm: add uefi variable support to virt machine type
  docs: add uefi variable service documentation
  hw/uefi: add MAINTAINERS entry

 include/hw/arm/virt.h              |   2 +
 include/hw/uefi/var-service-api.h  |  40 ++
 include/hw/uefi/var-service-edk2.h | 227 +++++++++
 include/hw/uefi/var-service.h      | 186 ++++++++
 hw/arm/virt.c                      |  41 ++
 hw/uefi/var-service-auth.c         | 361 ++++++++++++++
 hw/uefi/var-service-core.c         | 237 ++++++++++
 hw/uefi/var-service-guid.c         |  99 ++++
 hw/uefi/var-service-isa.c          |  91 ++++
 hw/uefi/var-service-json.c         | 242 ++++++++++
 hw/uefi/var-service-pkcs7-stub.c   |  16 +
 hw/uefi/var-service-pkcs7.c        | 436 +++++++++++++++++
 hw/uefi/var-service-policy.c       | 370 +++++++++++++++
 hw/uefi/var-service-siglist.c      | 212 +++++++++
 hw/uefi/var-service-sysbus.c       |  90 ++++
 hw/uefi/var-service-utils.c        | 241 ++++++++++
 hw/uefi/var-service-vars.c         | 725 +++++++++++++++++++++++++++++
 MAINTAINERS                        |   6 +
 docs/devel/index-internals.rst     |   1 +
 docs/devel/uefi-vars.rst           |  66 +++
 hw/Kconfig                         |   1 +
 hw/meson.build                     |   1 +
 hw/uefi/Kconfig                    |   9 +
 hw/uefi/LIMITATIONS.md             |   7 +
 hw/uefi/meson.build                |  24 +
 hw/uefi/trace-events               |  17 +
 meson.build                        |   1 +
 qapi/meson.build                   |   1 +
 qapi/qapi-schema.json              |   1 +
 qapi/uefi.json                     |  45 ++
 30 files changed, 3796 insertions(+)
 create mode 100644 include/hw/uefi/var-service-api.h
 create mode 100644 include/hw/uefi/var-service-edk2.h
 create mode 100644 include/hw/uefi/var-service.h
 create mode 100644 hw/uefi/var-service-auth.c
 create mode 100644 hw/uefi/var-service-core.c
 create mode 100644 hw/uefi/var-service-guid.c
 create mode 100644 hw/uefi/var-service-isa.c
 create mode 100644 hw/uefi/var-service-json.c
 create mode 100644 hw/uefi/var-service-pkcs7-stub.c
 create mode 100644 hw/uefi/var-service-pkcs7.c
 create mode 100644 hw/uefi/var-service-policy.c
 create mode 100644 hw/uefi/var-service-siglist.c
 create mode 100644 hw/uefi/var-service-sysbus.c
 create mode 100644 hw/uefi/var-service-utils.c
 create mode 100644 hw/uefi/var-service-vars.c
 create mode 100644 docs/devel/uefi-vars.rst
 create mode 100644 hw/uefi/Kconfig
 create mode 100644 hw/uefi/LIMITATIONS.md
 create mode 100644 hw/uefi/meson.build
 create mode 100644 hw/uefi/trace-events
 create mode 100644 qapi/uefi.json

-- 
2.47.1


^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2025-01-08 14:03 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-07 15:33 [PATCH v2 00/21] hw/uefi: add uefi variable service Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 01/21] hw/uefi: add include/hw/uefi/var-service-api.h Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 02/21] hw/uefi: add include/hw/uefi/var-service-edk2.h Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 03/21] hw/uefi: add include/hw/uefi/var-service.h Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 04/21] hw/uefi: add var-service-guid.c Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 05/21] hw/uefi: add var-service-utils.c Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 06/21] hw/uefi: add var-service-vars.c Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 07/21] hw/uefi: add var-service-auth.c Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 08/21] hw/uefi: add var-service-policy.c Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 09/21] hw/uefi: add var-service-core.c Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 10/21] hw/uefi: add var-service-pkcs7.c Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 11/21] hw/uefi: add var-service-pkcs7-stub.c Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 12/21] hw/uefi: add var-service-siglist.c Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 13/21] hw/uefi: add var-service-json.c + qapi for NV vars Gerd Hoffmann
2025-01-07 15:49   ` Daniel P. Berrangé
2025-01-07 16:16     ` Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 14/21] hw/uefi: add trace-events Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 15/21] hw/uefi: add UEFI_VARS to Kconfig Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 16/21] hw/uefi: add to meson Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 17/21] hw/uefi: add uefi-vars-sysbus device Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 18/21] hw/uefi: add uefi-vars-isa device Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 19/21] hw/arm: add uefi variable support to virt machine type Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 20/21] docs: add uefi variable service documentation Gerd Hoffmann
2025-01-07 15:33 ` [PATCH v2 21/21] hw/uefi: add MAINTAINERS entry Gerd Hoffmann
2025-01-07 15:41 ` [PATCH v2 00/21] hw/uefi: add uefi variable service Daniel P. Berrangé
2025-01-07 15:51   ` Gerd Hoffmann
2025-01-08 11:53 ` Marc-André Lureau
2025-01-08 12:24   ` Daniel P. Berrangé
2025-01-08 13:45     ` Gerd Hoffmann
2025-01-08 14:02   ` Gerd Hoffmann

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.