From: Brijesh Singh <brijesh.singh@amd.com>
To: Borislav Petkov <bp@alien8.de>
Cc: brijesh.singh@amd.com, kvm@vger.kernel.org,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Radim Krčmář" <rkrcmar@redhat.com>,
"Herbert Xu" <herbert@gondor.apana.org.au>,
"Gary Hook" <gary.hook@amd.com>,
"Tom Lendacky" <thomas.lendacky@amd.com>,
linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [Part2 PATCH v6 13/38] crypto: ccp: Add Secure Encrypted Virtualization (SEV) command support
Date: Sat, 28 Oct 2017 07:20:51 -0500 [thread overview]
Message-ID: <d6eba23e-cea2-6b4c-3594-59223d10bd6b@amd.com> (raw)
In-Reply-To: <20171028000034.46r72fyaprfjwdj7@pd.tnic>
On 10/27/17 7:00 PM, Borislav Petkov wrote:
> On Fri, Oct 27, 2017 at 05:59:23PM -0500, Brijesh Singh wrote:
>> Yes it is typo. PEK_GEN wants FW to be in INIT state hence someone need
>> to transition from UNINIT -> INIT.
> Which, once you've done it once on driver init, is there.
>
>> That's what I am doing except FACTORY_RESET.
> Well, not really. Lemme pick a command at random...
>
> PEK_CSR. For that, you do INIT -> PEK_CSR -> SHUTDOWN.
>
> Doc says, platform needs to be in INIT or WORKING state. But nothing
> says you should shut it down. Spec says, SHUTDOWN transitions platform
> to UNINIT state. So when the next command comes in which needs the
> platform to be in INIT state, you go and INIT it again. For no reason
> *WHATSOEVER*!
>
> I know, you're gonna say, but what if the next command needs a different
> state than INIT. Well, *then* you transition it, in the command
> function. When that function executes. But not before that and not in
> preparation that *maybe* the next command will be it.
>
> Now, if you did:
>
> INIT once during driver init
>
> PEK_CSR
>
> (platform remains in INIT state)
>
> <--- the next command here can execute directly if it is allowed in INIT
> state.
>
> Instead, the platform has been shutdown and you init it again. Do you
> see now what I mean?
Yes, I can see that with your proposal we may able to save some PSP
interaction because after command execution we do not restore to the
previous state. e.g before executing the PEK_CSR command if FW was in
UINIT then we do UNINIT -> INIT and leave it to INIT state.
> IOW, once you init the PSP master, you should keep it in the INIT state
> - or the state in which most commands expect it to be and thus save
> yourself all that unnecessary toggling. If a command needs it to be in a
> different state, only *then* you transition it.
Let me implement it and send you the patch. I think the command
execution function will look like this:
static int sev_ioctl_do_pek_csr(...)
{
....
....
mutex(&fw_init_mutex);
/* If FW is not in INIT state then initialize before executing command */
if (psp->sev_state != SEV_STATE_INIT) {
rc = sev_platform_init(...);
if (rc) {
mutex_unlock(&fw_init_mutex);
return rc;
}
}
rc = sev_do_cmd(....)
mutex_unlock(&fw_init_mutex);
return rc;
}
and factory reset will look like this
static int sev_ioctl_do_reset(...)
{
mutex(&fw_init_mutex);
/* If FW is not in UINIT state then shutdown before executing command */
if (psp->sev_state != SEV_STATE_INIT)
sev_platform_shutdown(...);
rc = sev_do_cmd(....)
mutex_unlock(&fw_init_mutex);
return rc;
}
> Instead, what you have now is that you call INIT and SHUTDOWN
> around SEV_PEK_GEN, SEV_PDH_GEN, SEV_PEK_CSR, SEV_PEK_CERT_IMPORT,
> SEV_PDH_CERT_EXPORT and for all those, the platform must be in INIT
> (for some in WORKING state) but for all in INIT state and "The platform
> remains be in the same state after completion." So the whole SHUTDOWN ->
> INIT wankery in-between is a pure waste of electrons.
>
>> I see that we can do a small optimization -- since we already know
>> the FW state hence we can avoid issuing PSP command when we know for
>> sure that command will fail because we are not in correct state.
> As I said before, you should do that regardless by recording the current
> state of the PSP in variable so that you can save yourself the status
> querying.
>
>> If command needs INIT state and FW is not in INIT state then its safe to
>> transition from UNINIT -> INIT. But if command needs UNINIT state and FW
>> is in INIT state then its not safe to transition -- in those case we
>> simply return EBUSY and let the user retry the command.
> Whatever - that doesn't contradict what I'm proposing.
>
next prev parent reply other threads:[~2017-10-28 12:21 UTC|newest]
Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-20 2:33 [Part2 PATCH v6 00/38] x86: Secure Encrypted Virtualization (AMD) Brijesh Singh
2017-10-20 2:33 ` [Part2 PATCH v6 01/38] Documentation/virtual/kvm: Add AMD Secure Encrypted Virtualization (SEV) Brijesh Singh
2017-10-20 13:18 ` Jonathan Corbet
2017-10-23 22:40 ` Brijesh Singh
2017-10-20 2:33 ` [Part2 PATCH v6 02/38] x86/CPU/AMD: Add the Secure Encrypted Virtualization CPU feature Brijesh Singh
2017-10-20 2:33 ` [Part2 PATCH v6 03/38] kvm: svm: prepare for new bit definition in nested_ctl Brijesh Singh
2017-10-20 2:33 ` [Part2 PATCH v6 04/38] kvm: svm: Add SEV feature definitions to KVM Brijesh Singh
2017-10-20 2:33 ` [Part2 PATCH v6 05/38] KVM: SVM: Prepare to reserve asid for SEV guest Brijesh Singh
2017-10-20 2:33 ` [Part2 PATCH v6 06/38] KVM: X86: Extend CPUID range to include new leaf Brijesh Singh
2017-10-20 2:33 ` [Part2 PATCH v6 07/38] KVM: Introduce KVM_MEMORY_ENCRYPT_OP ioctl Brijesh Singh
2017-10-20 2:33 ` [Part2 PATCH v6 08/38] KVM: Introduce KVM_MEMORY_ENCRYPT_{UN,}REG_REGION ioctl Brijesh Singh
2017-10-20 15:00 ` Borislav Petkov
2017-10-20 2:33 ` [Part2 PATCH v6 10/38] crypto: ccp: Define SEV userspace ioctl and command id Brijesh Singh
2017-10-24 18:40 ` Gary R Hook
2017-10-20 2:33 ` [Part2 PATCH v6 11/38] crypto: ccp: Define SEV key management " Brijesh Singh
2017-10-24 18:40 ` Gary R Hook
2017-10-20 2:33 ` [Part2 PATCH v6 12/38] crypto: ccp: Add Platform Security Processor (PSP) device support Brijesh Singh
2017-10-24 18:40 ` Gary R Hook
2017-10-20 2:33 ` [Part2 PATCH v6 13/38] crypto: ccp: Add Secure Encrypted Virtualization (SEV) command support Brijesh Singh
2017-10-23 7:34 ` Borislav Petkov
2017-10-23 20:05 ` Brijesh Singh
2017-10-23 9:20 ` Borislav Petkov
2017-10-23 19:57 ` Brijesh Singh
2017-10-26 13:56 ` Borislav Petkov
2017-10-26 16:56 ` Brijesh Singh
2017-10-26 17:44 ` Borislav Petkov
2017-10-26 19:26 ` Brijesh Singh
2017-10-26 20:13 ` Borislav Petkov
2017-10-26 20:59 ` Brijesh Singh
2017-10-27 7:56 ` Borislav Petkov
2017-10-27 11:28 ` Brijesh Singh
2017-10-27 20:15 ` Borislav Petkov
2017-10-27 20:25 ` Brijesh Singh
2017-10-27 20:27 ` Borislav Petkov
2017-10-27 21:28 ` Brijesh Singh
2017-10-27 21:49 ` Borislav Petkov
2017-10-27 22:59 ` Brijesh Singh
2017-10-28 0:00 ` Borislav Petkov
2017-10-28 12:20 ` Brijesh Singh [this message]
2017-10-29 20:48 ` [Part2 PATCH v6.1 16/38] " Brijesh Singh
2017-10-29 21:14 ` Brijesh Singh
2017-10-30 17:21 ` Borislav Petkov
2017-10-30 17:49 ` Brijesh Singh
2017-10-30 17:57 ` Borislav Petkov
2017-10-31 1:29 ` Brijesh Singh
2017-10-31 10:39 ` Borislav Petkov
2017-10-20 2:33 ` [Part2 PATCH v6 14/38] crypto: ccp: Implement SEV_FACTORY_RESET ioctl command Brijesh Singh
2017-10-23 7:42 ` Borislav Petkov
2017-10-24 18:41 ` Gary R Hook
2017-10-29 21:16 ` [Part2 PATCH v6.1 " Brijesh Singh
2017-10-20 2:33 ` [Part2 PATCH v6 15/38] crypto: ccp: Implement SEV_PLATFORM_STATUS " Brijesh Singh
2017-10-23 8:48 ` Borislav Petkov
2017-10-24 18:41 ` Gary R Hook
2017-10-30 3:13 ` [Part2 PATCH v6.1 15/38] crypto: ccp: Implement SEV_PEK_GEN " Brijesh Singh
2017-10-20 2:33 ` [Part2 PATCH v6 16/38] " Brijesh Singh
2017-10-23 9:32 ` Borislav Petkov
2017-10-23 12:15 ` Brijesh Singh
2017-10-23 12:32 ` Borislav Petkov
2017-10-23 13:32 ` Brijesh Singh
2017-10-23 14:10 ` Borislav Petkov
2017-10-23 20:00 ` Brijesh Singh
2017-10-23 21:55 ` [Part2 PATCH v6.1 " Brijesh Singh
2017-10-24 18:42 ` Gary R Hook
2017-10-26 14:22 ` Borislav Petkov
2017-10-20 2:33 ` [Part2 PATCH v6 17/38] crypto: ccp: Implement SEV_PDH_GEN " Brijesh Singh
2017-10-23 12:35 ` Borislav Petkov
2017-10-24 18:41 ` Gary R Hook
2017-10-20 2:33 ` [Part2 PATCH v6 18/38] crypto: ccp: Implement SEV_PEK_CSR " Brijesh Singh
2017-10-23 12:49 ` Borislav Petkov
2017-10-23 22:10 ` [Part2 PATCH v6.1 " Brijesh Singh
2017-10-24 18:42 ` Gary R Hook
2017-10-30 3:23 ` [Part2 PATCH v6.2 " Brijesh Singh
2017-10-20 2:33 ` [Part2 PATCH v6 19/38] crypto: ccp: Implement SEV_PEK_CERT_IMPORT " Brijesh Singh
2017-10-23 22:14 ` [Part2 PATCH v6.1 " Brijesh Singh
2017-10-24 18:42 ` Gary R Hook
2017-10-20 2:33 ` [Part2 PATCH v6 20/38] crypto: ccp: Implement SEV_PDH_CERT_EXPORT " Brijesh Singh
2017-10-23 22:19 ` [Part2 PATCH v6.1 " Brijesh Singh
2017-10-24 18:43 ` Gary R Hook
2017-10-20 2:33 ` [Part2 PATCH v6 21/38] KVM: X86: Add CONFIG_KVM_AMD_SEV Brijesh Singh
2017-10-20 2:33 ` [Part2 PATCH v6 22/38] KVM: SVM: Add sev module_param Brijesh Singh
2017-10-20 2:33 ` [Part2 PATCH v6 23/38] KVM: SVM: Reserve ASID range for SEV guest Brijesh Singh
2017-10-27 20:23 ` Borislav Petkov
2017-10-20 2:33 ` [Part2 PATCH v6 24/38] KVM: Define SEV key management command id Brijesh Singh
2017-10-27 20:23 ` Borislav Petkov
2017-10-20 2:34 ` [Part2 PATCH v6 25/38] KVM: SVM: Add KVM_SEV_INIT command Brijesh Singh
2017-10-27 20:24 ` Borislav Petkov
2017-10-30 11:49 ` Brijesh Singh
2017-10-20 2:34 ` [Part2 PATCH v6 26/38] KVM: SVM: VMRUN should use assosiated ASID when SEV is enabled Brijesh Singh
2017-10-20 2:34 ` [Part2 PATCH v6 27/38] KVM: SVM: Add support for KVM_SEV_LAUNCH_START command Brijesh Singh
2017-10-20 2:34 ` [Part2 PATCH v6 28/38] KVM: SVM: Add support for KVM_SEV_LAUNCH_UPDATE_DATA command Brijesh Singh
2017-10-27 20:24 ` Borislav Petkov
2017-10-20 2:34 ` [Part2 PATCH v6 29/38] KVM: SVM: Add support for KVM_SEV_LAUNCH_MEASURE command Brijesh Singh
2017-10-27 20:24 ` Borislav Petkov
2017-10-20 2:34 ` [Part2 PATCH v6 30/38] KVM: SVM: Add support for SEV LAUNCH_FINISH command Brijesh Singh
2017-10-27 20:25 ` Borislav Petkov
2017-10-20 2:34 ` [Part2 PATCH v6 31/38] KVM: SVM: Add support for SEV GUEST_STATUS command Brijesh Singh
2017-10-27 20:25 ` Borislav Petkov
2017-10-20 2:34 ` [Part2 PATCH v6 32/38] KVM: SVM: Add support for SEV DEBUG_DECRYPT command Brijesh Singh
2017-10-27 20:25 ` Borislav Petkov
2017-10-30 13:56 ` Brijesh Singh
2017-10-30 15:12 ` Borislav Petkov
2017-10-30 16:33 ` Brijesh Singh
2017-10-20 2:34 ` [Part2 PATCH v6 33/38] KVM: SVM: Add support for SEV DEBUG_ENCRYPT command Brijesh Singh
2017-10-20 2:34 ` [Part2 PATCH v6 34/38] KVM: SVM: Add support for SEV LAUNCH_SECRET command Brijesh Singh
2017-10-20 2:34 ` [Part2 PATCH v6 35/38] KVM: SVM: Pin guest memory when SEV is active Brijesh Singh
2017-10-20 2:34 ` [Part2 PATCH v6 36/38] KVM: SVM: Clear C-bit from the page fault address Brijesh Singh
2017-10-20 2:34 ` [Part2 PATCH v6 37/38] KVM: SVM: Do not install #UD intercept when SEV is enabled Brijesh Singh
2017-10-20 2:34 ` [Part2 PATCH v6 38/38] KVM: X86: Restart the guest when insn_len is zero and " Brijesh Singh
2017-10-23 22:07 ` [Part2 PATCH v6.1 18/38] crypto: ccp: Implement SEV_PEK_CSR ioctl 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=d6eba23e-cea2-6b4c-3594-59223d10bd6b@amd.com \
--to=brijesh.singh@amd.com \
--cc=bp@alien8.de \
--cc=gary.hook@amd.com \
--cc=herbert@gondor.apana.org.au \
--cc=kvm@vger.kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=rkrcmar@redhat.com \
--cc=thomas.lendacky@amd.com \
/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
all inboxes | Powered by JetHome®