linux-crypto.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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: Thu, 26 Oct 2017 14:26:15 -0500	[thread overview]
Message-ID: <bc7254d3-a2d9-e3fd-02a4-164d5e4fb545@amd.com> (raw)
In-Reply-To: <20171026174427.GB29782@nazgul.tnic>



On 10/26/2017 12:44 PM, Borislav Petkov wrote:
> On Thu, Oct 26, 2017 at 11:56:57AM -0500, Brijesh Singh wrote:
>> The variable is used as ref counter.
> 
> ... and it can't be converted to a boolean because...?
> 

SHUTDOWN command unconditionally transitions a platform to uninitialized 
state. The command does not care how many processes are actively using 
the PSP. We don't want to shutdown the firmware while other process is 
still using it.

e.g consider three processes (A, B, C)

Process A:
----------
sev_platform_init()
sev_do_cmd(..)
...
...
sev_do_cmd(..)
...
sev_platform_shutdown()

Process B:
-----------
sev_platform_init()
sev_do_cmd(...)
sev_platform_shutdown()

Process C:
----------
sev_platform_init()
sev_do_cmd(...)
sev_do_cmd(...)
sev_do_cmd(...)
sev_platform_shutdown()

As per the SEV spec section 5.1.2 (platform state machine), several 
commands require that platform should be initialized before issuing the 
actual command. As you can see Process B may finish quickly and SHUTDOWN 
from process B will simply uninitialize the firmware and cause 
unexpected result to process A and C.


>> In your previous reply you comments on global semaphore (fw_init_mutex) and
>> in response I tried to highlight why we need the global semaphore. Did I
>> misunderstood your comment ?
> 
> Yes, what happens if you get preempted while holding the mutex? Will the other
> process be able to do anything?
> 

If other process tries to issue the sev_platform_init/shutdown() then 
they have to wait.

The sev_platform_init() and sev_platform_shutdown() uses the same global 
mutex. See the original code below.

+static int __sev_platform_init(struct sev_data_init *data, int *error)
+{
+	int rc = 0;
+
+	mutex_lock(&fw_init_mutex);
+
+	if (!fw_init_count) {
+		rc = sev_do_cmd(SEV_CMD_INIT, data, error);
+		if (rc)
+			goto unlock;
+	}
+
+	fw_init_count++;
+
+unlock:
+	mutex_unlock(&fw_init_mutex);
+	return rc;
+
+}
+
+int sev_platform_shutdown(int *error)
+{
+	int rc = 0;
+
+	mutex_lock(&fw_init_mutex);
+
+	if (!fw_init_count)
+		goto unlock;
+
+	if (fw_init_count == 1) {
+		rc = sev_do_cmd(SEV_CMD_SHUTDOWN, 0, error);
+		if (rc)
+			goto unlock;
+	}
+
+	fw_init_count--;
+
+unlock:
+	mutex_unlock(&fw_init_mutex);
+	return rc;
+}

  reply	other threads:[~2017-10-26 19:26 UTC|newest]

Thread overview: 72+ 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 09/38] crypto: ccp: Build the AMD secure processor driver only with AMD CPU support Brijesh Singh
2017-10-24 18:40   ` Gary R Hook
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 [this message]
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
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-23 22:07 ` [Part2 PATCH v6.1 18/38] crypto: ccp: Implement SEV_PEK_CSR " Brijesh Singh
2017-10-24 12:14 ` [Part2 PATCH v6 00/38] x86: Secure Encrypted Virtualization (AMD) Brijesh Singh
2017-11-02 20:18   ` 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=bc7254d3-a2d9-e3fd-02a4-164d5e4fb545@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;
as well as URLs for NNTP newsgroup(s).