OvmfPkg: Add WSMT ACPI table for SMM builds

Windows uses the Windows SMM Security Mitigation Table to decide
whether SMM firmware advertises the communication-buffer protections
needed by VBS [1].

WSMT ProtectionFlags represent a pinky promise that the underlying
firmware will implement various security practices [2].

Add a small DXE driver that installs a revision 1 WSMT table for the
OvmfPkgIa32X64 and OvmfPkgX64 builds.

WSMT ProtectionFlags are set to 0x3, asserting:
  EFI_WSMT_PROTECTION_FLAGS_FIXED_COMM_BUFFERS
  EFI_WSMT_PROTECTION_FLAGS_COMM_BUFFER_NESTED_PTR_PROTECTION

Note, we are intentionally not asserting
EFI_WSMT_PROTECTION_FLAGS_SYSTEM_RESOURCE_PROTECTION, as the QEMU side
is not yet tuned up to enforce this protection.

Note: when Windows Hypervisor Enforced Code Integrity is enabled,
Windows msinfo -> Virtualization-based security Available Security
Properties will NOT include "SMM Security Mitigations 1.0", due to
the missing SYSTEM_RESOURCE_PROTECTION flag. Note, WSMT is required
for default enablement of HVCI [3], so we're taking a step in the right
direction here, but not yet 100% complete as of this patch.

References:
[1] https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-vbs
[2] https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-uefi-wsmt
[3] https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-hvci-enablement#check-results-of-memory-integrity-default-enablement

Cc: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Jon Kohler <jon@nutanix.com>
6 files changed