From: Nikunj A Dadhania <nikunj@amd.com>
To: <linux-kernel@vger.kernel.org>, <thomas.lendacky@amd.com>,
<bp@alien8.de>, <x86@kernel.org>, <kvm@vger.kernel.org>
Cc: <mingo@redhat.com>, <tglx@linutronix.de>,
<dave.hansen@linux.intel.com>, <pgonda@google.com>,
<seanjc@google.com>, <pbonzini@redhat.com>, <nikunj@amd.com>
Subject: [PATCH v9 00/24] Add Secure TSC support for SNP guests
Date: Fri, 31 May 2024 10:00:14 +0530 [thread overview]
Message-ID: <20240531043038.3370793-1-nikunj@amd.com> (raw)
This patchset is also available at:
https://github.com/AMDESE/linux-kvm/tree/sectsc-guest-latest
and is based on commit: 1613e604df0c ("Linux 6.10-rc1")
Overview
--------
Secure TSC allows guests to securely use RDTSC/RDTSCP instructions as the
parameters being used cannot be changed by hypervisor once the guest is
launched. More details in the AMD64 APM Vol 2, Section "Secure TSC".
During the boot-up of the secondary cpus, SecureTSC enabled guests need to
query TSC info from AMD Security Processor. This communication channel is
encrypted between the AMD Security Processor and the guest, the hypervisor
is just the conduit to deliver the guest messages to the AMD Security
Processor. Each message is protected with an AEAD (AES-256 GCM). See "SEV
Secure Nested Paging Firmware ABI Specification" document (currently at
https://www.amd.com/system/files/TechDocs/56860.pdf) section "TSC Info"
Use a minimal GCM library to encrypt/decrypt SNP Guest messages to
communicate with the AMD Security Processor which is available at early
boot.
SEV-guest driver has the implementation for guest and AMD Security
Processor communication. As the TSC_INFO needs to be initialized during
early boot before smp cpus are started, move most of the sev-guest driver
code to kernel/sev.c and provide well defined APIs to the sev-guest driver
to use the interface to avoid code-duplication.
Patches:
01-09: Preparatory patches for code movement and general cleanup/fixups
10-13: Patches moving SNP guest messaging code from SEV guest driver to
SEV common code
14-16: Error handling and caching secrets page
17-24: SecureTSC enablement patches.
Testing SecureTSC
-----------------
SecureTSC hypervisor patches based on top of SEV-SNP Guest MEMFD series:
https://github.com/AMDESE/linux-kvm/tree/sectsc-host-latest
QEMU changes:
https://github.com/nikunjad/qemu/tree/snp-securetsc-latest
QEMU commandline SEV-SNP with SecureTSC:
qemu-system-x86_64 -cpu EPYC-Milan-v2,+invtsc -smp 4 \
-object memory-backend-memfd,id=ram1,size=1G,share=true,prealloc=false,reserve=false \
-object sev-snp-guest,id=sev0,cbitpos=51,reduced-phys-bits=1,secure-tsc=on \
-machine q35,confidential-guest-support=sev0,memory-backend=ram1 \
...
Changelog:
----------
v9:
* Added Acked-by/Reviewed-by
* Removed Reviewed-by/Tested-by from patches that had significant changes
* Added patch to make payload a variable length array in snp_guest_msg
* Fix all your user-visible strings (vmpck => VMPCK) and readabilty.
* Separated patch for message sequence handling
* Handle failures from snp_init() in sme_enable()
* Preparatory patches:
* Carved out simplify VMPCK and OS message sequence changes
* Carved out SNP guest messaging init/exit for proper initialization and
cleanup.
* Move SNP command mutex down and make it private to sev.c
* Pure code movement patch and subsequent code changes patches
* Drop patches adding guest initiation hook enc_init() and call
snp_secure_tsc_prepare() from mem_encrypt.c
* Use CC_ATTR_GUEST_SECURE_TSC and drop synthetic SecureTSC feature bit
v8: https://lore.kernel.org/lkml/20240215113128.275608-1-nikunj@amd.com/
* Rebased on top of tip/x86/sev
* Use minimum size of IV or msg_seqno in memcpy
* Use arch/x86/include/asm/sev.h instead of sev-guest.h
* Use DEFINE_MUTEX for snp_guest_cmd_mutex
* Added Reviewed-by from Tom.
* Dropped Tested-by from patch 3/16
v7: https://lore.kernel.org/kvm/20231220151358.2147066-1-nikunj@amd.com/
v6: https://lore.kernel.org/lkml/20231128125959.1810039-1-nikunj@amd.com/
v5: https://lore.kernel.org/lkml/20231030063652.68675-1-nikunj@amd.com/
v4: https://lore.kernel.org/lkml/20230814055222.1056404-1-nikunj@amd.com/
v3: https://lore.kernel.org/lkml/20230722111909.15166-1-nikunj@amd.com/
v2: https://lore.kernel.org/r/20230307192449.24732-1-bp@alien8.de/
v1: https://lore.kernel.org/r/20230130120327.977460-1-nikunj@amd.com
Nikunj A Dadhania (24):
virt: sev-guest: Use AES GCM crypto library
virt: sev-guest: Replace dev_dbg with pr_debug
virt: sev-guest: Make payload a variable length array
virt: sev-guest: Add SNP guest request structure
virt: sev-guest: Fix user-visible strings
virt: sev-guest: Simplify VMPCK and sequence number assignments
virt: sev-guest: Store VMPCK index to SNP guest device structure
virt: sev-guest: Take mutex in snp_send_guest_request()
virt: sev-guest: Carve out SNP guest messaging init/exit
x86/sev: Move core SEV guest driver routines to common code
x86/sev: Replace dev_[err,alert] with pr_[err,alert]
x86/sev: Make snp_issue_guest_request() static
x86/sev: Make sev-guest driver functional again
x86/sev: Handle failures from snp_init()
x86/sev: Cache the secrets page address
x86/sev: Drop sev_guest_platform_data structure
x86/cc: Add CC_ATTR_GUEST_SECURE_TSC
x86/sev: Add Secure TSC support for SNP guests
x86/sev: Change TSC MSR behavior for Secure TSC enabled guests
x86/sev: Prevent RDTSC/RDTSCP interception for Secure TSC enabled
guests
x86/kvmclock: Skip kvmclock when Secure TSC is available
x86/sev: Mark Secure TSC as reliable
x86/cpu/amd: Do not print FW_BUG for Secure TSC
x86/sev: Enable Secure TSC for SNP guests
arch/x86/include/asm/sev-common.h | 1 +
arch/x86/include/asm/sev.h | 197 ++++++-
arch/x86/include/asm/svm.h | 6 +-
drivers/virt/coco/sev-guest/sev-guest.h | 63 ---
include/linux/cc_platform.h | 8 +
arch/x86/boot/compressed/sev.c | 3 +-
arch/x86/coco/core.c | 3 +
arch/x86/kernel/cpu/amd.c | 3 +-
arch/x86/kernel/kvmclock.c | 2 +-
arch/x86/kernel/sev-shared.c | 10 +
arch/x86/kernel/sev.c | 581 +++++++++++++++++--
arch/x86/mm/mem_encrypt.c | 4 +
arch/x86/mm/mem_encrypt_amd.c | 4 +
arch/x86/mm/mem_encrypt_identity.c | 7 +
drivers/virt/coco/sev-guest/sev-guest.c | 711 +++---------------------
arch/x86/Kconfig | 1 +
drivers/virt/coco/sev-guest/Kconfig | 3 -
17 files changed, 843 insertions(+), 764 deletions(-)
delete mode 100644 drivers/virt/coco/sev-guest/sev-guest.h
base-commit: 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0
--
2.34.1
next reply other threads:[~2024-05-31 4:31 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-31 4:30 Nikunj A Dadhania [this message]
2024-05-31 4:30 ` [PATCH v9 01/24] virt: sev-guest: Use AES GCM crypto library Nikunj A Dadhania
2024-06-12 17:17 ` Borislav Petkov
2024-06-13 3:40 ` Nikunj A. Dadhania
2024-05-31 4:30 ` [PATCH v9 02/24] virt: sev-guest: Replace dev_dbg with pr_debug Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 03/24] virt: sev-guest: Make payload a variable length array Nikunj A Dadhania
2024-06-17 20:51 ` Tom Lendacky
2024-06-21 16:54 ` Borislav Petkov
2024-06-23 16:16 ` Nikunj A. Dadhania
2024-06-24 6:11 ` Borislav Petkov
2024-06-24 10:03 ` Nikunj A. Dadhania
2024-06-24 13:00 ` Tom Lendacky
2024-06-24 13:39 ` Borislav Petkov
2024-06-24 18:12 ` Nikunj A. Dadhania
2024-06-25 12:19 ` Borislav Petkov
2024-05-31 4:30 ` [PATCH v9 04/24] virt: sev-guest: Add SNP guest request structure Nikunj A Dadhania
2024-06-18 21:06 ` Tom Lendacky
2024-05-31 4:30 ` [PATCH v9 05/24] virt: sev-guest: Fix user-visible strings Nikunj A Dadhania
2024-06-18 21:11 ` Tom Lendacky
2024-06-19 5:58 ` Nikunj A. Dadhania
2024-05-31 4:30 ` [PATCH v9 06/24] virt: sev-guest: Simplify VMPCK and sequence number assignments Nikunj A Dadhania
2024-06-18 21:27 ` Tom Lendacky
2024-06-19 6:06 ` Nikunj A. Dadhania
2024-06-19 15:12 ` Tom Lendacky
2024-06-19 15:20 ` Nikunj A. Dadhania
2024-05-31 4:30 ` [PATCH v9 07/24] virt: sev-guest: Store VMPCK index to SNP guest device structure Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 08/24] virt: sev-guest: Take mutex in snp_send_guest_request() Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 09/24] virt: sev-guest: Carve out SNP guest messaging init/exit Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 10/24] x86/sev: Move core SEV guest driver routines to common code Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 11/24] x86/sev: Replace dev_[err,alert] with pr_[err,alert] Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 12/24] x86/sev: Make snp_issue_guest_request() static Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 13/24] x86/sev: Make sev-guest driver functional again Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 14/24] x86/sev: Handle failures from snp_init() Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 15/24] x86/sev: Cache the secrets page address Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 16/24] x86/sev: Drop sev_guest_platform_data structure Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 17/24] x86/cc: Add CC_ATTR_GUEST_SECURE_TSC Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 18/24] x86/sev: Add Secure TSC support for SNP guests Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 19/24] x86/sev: Change TSC MSR behavior for Secure TSC enabled guests Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 20/24] x86/sev: Prevent RDTSC/RDTSCP interception " Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 21/24] x86/kvmclock: Skip kvmclock when Secure TSC is available Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 22/24] x86/sev: Mark Secure TSC as reliable Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 23/24] x86/cpu/amd: Do not print FW_BUG for Secure TSC Nikunj A Dadhania
2024-05-31 4:30 ` [PATCH v9 24/24] x86/sev: Enable Secure TSC for SNP guests Nikunj A Dadhania
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240531043038.3370793-1-nikunj@amd.com \
--to=nikunj@amd.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=pgonda@google.com \
--cc=seanjc@google.com \
--cc=tglx@linutronix.de \
--cc=thomas.lendacky@amd.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox