From: Brijesh Singh <brijesh.singh@amd.com>
To: kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: bp@alien8.de, "Brijesh Singh" <brijesh.singh@amd.com>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Ingo Molnar" <mingo@redhat.com>,
"H. Peter Anvin" <hpa@zytor.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Radim Krčmář" <rkrcmar@redhat.com>,
"Joerg Roedel" <joro@8bytes.org>, "Borislav Petkov" <bp@suse.de>,
"Tom Lendacky" <thomas.lendacky@amd.com>,
"Herbert Xu" <herbert@gondor.apana.org.au>,
"David S . Miller" <davem@davemloft.net>,
"Gary Hook" <gary.hook@amd.com>,
x86@kernel.org, linux-crypto@vger.kernel.org
Subject: [Part2 PATCH v7 00/38] x86: Secure Encrypted Virtualization (AMD)
Date: Wed, 1 Nov 2017 16:15:45 -0500 [thread overview]
Message-ID: <20171101211623.71496-1-brijesh.singh@amd.com> (raw)
This part of Secure Encrypted Virtualization (SEV) patch series focuses on KVM
changes required to create and manage SEV guests.
SEV is an extension to the AMD-V architecture which supports running encrypted
virtual machine (VMs) under the control of a hypervisor. Encrypted VMs have their
pages (code and data) secured such that only the guest itself has access to
unencrypted version. Each encrypted VM is associated with a unique encryption key;
if its data is accessed to a different entity using a different key the encrypted
guest's data will be incorrectly decrypted, leading to unintelligible data.
This security model ensures that hypervisor will no longer able to inspect or
alter any guest code or data.
The key management of this feature is handled by a separate processor known as
the AMD Secure Processor (AMD-SP) which is present on AMD SOCs. The SEV Key
Management Specification (see below) provides a set of commands which can be
used by hypervisor to load virtual machine keys through the AMD-SP driver.
The patch series adds a new ioctl in KVM driver (KVM_MEMORY_ENCRYPTION_OP). The
ioctl will be used by qemu to issue SEV guest-specific commands defined in Key
Management Specification.
The following links provide additional details:
AMD Memory Encryption white paper:
http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2013/12/AMD_Memory_Encryption_Whitepaper_v7-Public.pdf
AMD64 Architecture Programmer's Manual:
http://support.amd.com/TechDocs/24593.pdf
SME is section 7.10
SEV is section 15.34
SEV Key Management:
http://support.amd.com/TechDocs/55766_SEV-KM API_Specification.pdf
KVM Forum Presentation:
http://www.linux-kvm.org/images/7/74/02x08A-Thomas_Lendacky-AMDs_Virtualizatoin_Memory_Encryption_Technology.pdf
SEV Guest BIOS support:
SEV support has been add to EDKII/OVMF BIOS
https://github.com/tianocore/edk2
SEV Part 1 patch series: https://marc.info/?l=linux-kernel&m=150851036113575&w=2
--
The series is based on kvm/master commit : cc9085b68753 (Merge branch \
'kvm-ppc-fixes')
Complete tree is available at:
repo: https://github.com/codomania/kvm.git
branch: sev-v7-p2
TODO:
* Add SEV guest migration command support
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Radim Krčmář" <rkrcmar@redhat.com>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Borislav Petkov <bp@suse.de>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: David S. Miller <davem@davemloft.net>
Cc: Gary Hook <gary.hook@amd.com>
Cc: x86@kernel.org
Cc: kvm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-crypto@vger.kernel.org
Changes since v6:
* (ccp): Extend psp_device structure to track the FW INIT and SHUTDOWN states.
* (ccp): Init and Uninit SEV FW during module load/unload
* (ccp): Avoid repeated k*alloc() for init and status command buffer
* (kvm): Rework DBG command to fix the compilation warning seen with gcc7.x
* (kvm): Convert the SEV doc in rst format
Changes since v5:
* split the PSP driver support into multiple patches
* multiple improvements from Boris
* remove mem_enc_enabled() ops
Changes since v4:
* Fixes to address kbuild robot errors
* Add 'sev' module params to allow enable/disable SEV feature
* Update documentation
* Multiple fixes to address v4 feedbacks
* Some coding style changes to address checkpatch reports
Changes since v3:
* Re-design the PSP interface support patch
* Rename the ioctls based on the feedbacks
* Improve documentation
* Fix i386 build issues
* Add LAUNCH_SECRET command
* Add new Kconfig option to enable SEV support
* Changes to address v3 feedbacks.
Changes since v2:
* Add KVM_MEMORY_ENCRYPT_REGISTER/UNREGISTER_RAM ioct to register encrypted
memory ranges (recommend by Paolo)
* Extend kvm_x86_ops to provide new memory_encryption_enabled ops
* Enhance DEBUG DECRYPT/ENCRYPT commands to work with more than one page \
(recommended by Paolo)
* Optimize LAUNCH_UPDATE command to reduce the number of calls to AMD-SP driver
* Changes to address v2 feedbacks
Borislav Petkov (1):
crypto: ccp: Build the AMD secure processor driver only with AMD CPU
support
Brijesh Singh (34):
Documentation/virtual/kvm: Add AMD Secure Encrypted Virtualization
(SEV)
KVM: SVM: Prepare to reserve asid for SEV guest
KVM: X86: Extend CPUID range to include new leaf
KVM: Introduce KVM_MEMORY_ENCRYPT_OP ioctl
KVM: Introduce KVM_MEMORY_ENCRYPT_{UN,}REG_REGION ioctl
crypto: ccp: Define SEV userspace ioctl and command id
crypto: ccp: Define SEV key management command id
crypto: ccp: Add Platform Security Processor (PSP) device support
crypto: ccp: Add Secure Encrypted Virtualization (SEV) command support
crypto: ccp: Implement SEV_FACTORY_RESET ioctl command
crypto: ccp: Implement SEV_PLATFORM_STATUS ioctl command
crypto: ccp: Implement SEV_PEK_GEN ioctl command
crypto: ccp: Implement SEV_PDH_GEN ioctl command
crypto: ccp: Implement SEV_PEK_CSR ioctl command
crypto: ccp: Implement SEV_PEK_CERT_IMPORT ioctl command
crypto: ccp: Implement SEV_PDH_CERT_EXPORT ioctl command
KVM: X86: Add CONFIG_KVM_AMD_SEV
KVM: SVM: Add sev module_param
KVM: SVM: Reserve ASID range for SEV guest
KVM: Define SEV key management command id
KVM: SVM: Add KVM_SEV_INIT command
KVM: SVM: VMRUN should use associated ASID when SEV is enabled
KVM: SVM: Add support for KVM_SEV_LAUNCH_START command
KVM: SVM: Add support for KVM_SEV_LAUNCH_UPDATE_DATA command
KVM: SVM: Add support for KVM_SEV_LAUNCH_MEASURE command
KVM: SVM: Add support for SEV LAUNCH_FINISH command
KVM: SVM: Add support for SEV GUEST_STATUS command
KVM: SVM: Add support for SEV DEBUG_DECRYPT command
KVM: SVM: Add support for SEV DEBUG_ENCRYPT command
KVM: SVM: Add support for SEV LAUNCH_SECRET command
KVM: SVM: Pin guest memory when SEV is active
KVM: SVM: Clear C-bit from the page fault address
KVM: SVM: Do not install #UD intercept when SEV is enabled
KVM: X86: Restart the guest when insn_len is zero and SEV is enabled
Tom Lendacky (3):
x86/CPU/AMD: Add the Secure Encrypted Virtualization CPU feature
kvm: svm: prepare for new bit definition in nested_ctl
kvm: svm: Add SEV feature definitions to KVM
Documentation/virtual/kvm/00-INDEX | 3 +
.../virtual/kvm/amd-memory-encryption.rst | 247 +++++
Documentation/virtual/kvm/api.txt | 50 +
arch/x86/include/asm/cpufeatures.h | 1 +
arch/x86/include/asm/kvm_host.h | 15 +
arch/x86/include/asm/msr-index.h | 2 +
arch/x86/include/asm/svm.h | 3 +
arch/x86/kernel/cpu/amd.c | 66 +-
arch/x86/kernel/cpu/scattered.c | 1 +
arch/x86/kvm/Kconfig | 10 +
arch/x86/kvm/cpuid.c | 2 +-
arch/x86/kvm/mmu.c | 10 +
arch/x86/kvm/svm.c | 1135 +++++++++++++++++++-
arch/x86/kvm/x86.c | 30 +
drivers/crypto/ccp/Kconfig | 12 +
drivers/crypto/ccp/Makefile | 1 +
drivers/crypto/ccp/psp-dev.c | 807 ++++++++++++++
drivers/crypto/ccp/psp-dev.h | 83 ++
drivers/crypto/ccp/sp-dev.c | 35 +
drivers/crypto/ccp/sp-dev.h | 28 +-
drivers/crypto/ccp/sp-pci.c | 52 +
include/linux/psp-sev.h | 641 +++++++++++
include/uapi/linux/kvm.h | 90 ++
include/uapi/linux/psp-sev.h | 113 ++
24 files changed, 3407 insertions(+), 30 deletions(-)
create mode 100644 Documentation/virtual/kvm/amd-memory-encryption.rst
create mode 100644 drivers/crypto/ccp/psp-dev.c
create mode 100644 drivers/crypto/ccp/psp-dev.h
create mode 100644 include/linux/psp-sev.h
create mode 100644 include/uapi/linux/psp-sev.h
--
2.9.5
next reply other threads:[~2017-11-01 21:16 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-01 21:15 Brijesh Singh [this message]
2017-11-01 21:15 ` [Part2 PATCH v7 01/38] Documentation/virtual/kvm: Add AMD Secure Encrypted Virtualization (SEV) Brijesh Singh
2017-11-01 21:15 ` [Part2 PATCH v7 02/38] x86/CPU/AMD: Add the Secure Encrypted Virtualization CPU feature Brijesh Singh
2017-11-01 21:15 ` [Part2 PATCH v7 03/38] kvm: svm: prepare for new bit definition in nested_ctl Brijesh Singh
2017-11-01 21:15 ` [Part2 PATCH v7 04/38] kvm: svm: Add SEV feature definitions to KVM Brijesh Singh
2017-11-01 21:15 ` [Part2 PATCH v7 05/38] KVM: SVM: Prepare to reserve asid for SEV guest Brijesh Singh
2017-11-01 21:15 ` [Part2 PATCH v7 06/38] KVM: X86: Extend CPUID range to include new leaf Brijesh Singh
2017-11-01 21:15 ` [Part2 PATCH v7 07/38] KVM: Introduce KVM_MEMORY_ENCRYPT_OP ioctl Brijesh Singh
2017-11-01 21:15 ` [Part2 PATCH v7 08/38] KVM: Introduce KVM_MEMORY_ENCRYPT_{UN,}REG_REGION ioctl Brijesh Singh
2017-11-01 21:15 ` [Part2 PATCH v7 09/38] crypto: ccp: Build the AMD secure processor driver only with AMD CPU support Brijesh Singh
2017-11-01 21:15 ` [Part2 PATCH v7 10/38] crypto: ccp: Define SEV userspace ioctl and command id Brijesh Singh
2017-11-01 21:15 ` [Part2 PATCH v7 11/38] crypto: ccp: Define SEV key management " Brijesh Singh
2017-11-01 21:15 ` [Part2 PATCH v7 12/38] crypto: ccp: Add Platform Security Processor (PSP) device support Brijesh Singh
2017-11-01 21:15 ` [Part2 PATCH v7 13/38] crypto: ccp: Add Secure Encrypted Virtualization (SEV) command support Brijesh Singh
2017-11-02 17:10 ` Borislav Petkov
2017-11-02 17:32 ` Brijesh Singh
2017-11-01 21:15 ` [Part2 PATCH v7 14/38] crypto: ccp: Implement SEV_FACTORY_RESET ioctl command Brijesh Singh
2017-11-03 12:42 ` Borislav Petkov
2017-11-01 21:16 ` [Part2 PATCH v7 15/38] crypto: ccp: Implement SEV_PLATFORM_STATUS " Brijesh Singh
2017-11-01 21:16 ` [Part2 PATCH v7 16/38] crypto: ccp: Implement SEV_PEK_GEN " Brijesh Singh
2017-11-01 21:16 ` [Part2 PATCH v7 17/38] crypto: ccp: Implement SEV_PDH_GEN " Brijesh Singh
2017-11-01 21:16 ` [Part2 PATCH v7 18/38] crypto: ccp: Implement SEV_PEK_CSR " Brijesh Singh
2017-11-03 19:42 ` Borislav Petkov
2017-11-03 20:01 ` Brijesh Singh
2017-11-01 21:16 ` [Part2 PATCH v7 19/38] crypto: ccp: Implement SEV_PEK_CERT_IMPORT " Brijesh Singh
2017-11-04 10:22 ` Borislav Petkov
2017-11-01 21:16 ` [Part2 PATCH v7 20/38] crypto: ccp: Implement SEV_PDH_CERT_EXPORT " Brijesh Singh
2017-11-05 11:34 ` Borislav Petkov
2017-11-06 16:16 ` Brijesh Singh
2017-11-01 21:16 ` [Part2 PATCH v7 21/38] KVM: X86: Add CONFIG_KVM_AMD_SEV Brijesh Singh
2017-11-01 21:16 ` [Part2 PATCH v7 22/38] KVM: SVM: Add sev module_param Brijesh Singh
2017-11-01 21:16 ` [Part2 PATCH v7 23/38] KVM: SVM: Reserve ASID range for SEV guest Brijesh Singh
2017-11-06 10:34 ` Borislav Petkov
2017-11-06 16:18 ` Brijesh Singh
2017-11-01 21:16 ` [Part2 PATCH v7 24/38] KVM: Define SEV key management command id Brijesh Singh
2017-11-01 21:16 ` [Part2 PATCH v7 25/38] KVM: SVM: Add KVM_SEV_INIT command Brijesh Singh
2017-11-06 10:57 ` Borislav Petkov
2017-11-06 16:19 ` Brijesh Singh
2017-11-01 21:16 ` [Part2 PATCH v7 26/38] KVM: SVM: VMRUN should use associated ASID when SEV is enabled Brijesh Singh
2017-11-01 21:16 ` [Part2 PATCH v7 27/38] KVM: SVM: Add support for KVM_SEV_LAUNCH_START command Brijesh Singh
2017-11-01 21:16 ` [Part2 PATCH v7 28/38] KVM: SVM: Add support for KVM_SEV_LAUNCH_UPDATE_DATA command Brijesh Singh
2017-11-01 21:16 ` [Part2 PATCH v7 29/38] KVM: SVM: Add support for KVM_SEV_LAUNCH_MEASURE command Brijesh Singh
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=20171101211623.71496-1-brijesh.singh@amd.com \
--to=brijesh.singh@amd.com \
--cc=bp@alien8.de \
--cc=bp@suse.de \
--cc=davem@davemloft.net \
--cc=gary.hook@amd.com \
--cc=herbert@gondor.apana.org.au \
--cc=hpa@zytor.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=rkrcmar@redhat.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;
as well as URLs for NNTP newsgroup(s).