Re: [Part2 PATCH v5 17/31] KVM: SVM: Add KVM_SEV_INIT command

From: Borislav Petkov
Date: Sat Oct 14 2017 - 05:22:08 EST


On Wed, Oct 04, 2017 at 08:13:58AM -0500, Brijesh Singh wrote:
> The command initializes the SEV platform context and allocates a new ASID
> for this guest from the SEV ASID pool. The firmware must be initialized
> before we issue any guest launch commands to create a new memory encryption
> context.
>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: Ingo Molnar <mingo@xxxxxxxxxx>
> Cc: "H. Peter Anvin" <hpa@xxxxxxxxx>
> Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx>
> Cc: "Radim KrÄmÃÅ" <rkrcmar@xxxxxxxxxx>
> Cc: Joerg Roedel <joro@xxxxxxxxxx>
> Cc: Borislav Petkov <bp@xxxxxxx>
> Cc: Tom Lendacky <thomas.lendacky@xxxxxxx>
> Cc: x86@xxxxxxxxxx
> Cc: kvm@xxxxxxxxxxxxxxx
> Cc: linux-kernel@xxxxxxxxxxxxxxx
> Signed-off-by: Brijesh Singh <brijesh.singh@xxxxxxx>
> ---
> arch/x86/include/asm/kvm_host.h | 7 ++
> arch/x86/kvm/svm.c | 189 +++++++++++++++++++++++++++++++++++++++-
> 2 files changed, 195 insertions(+), 1 deletion(-)

Just minor cleanups. With those applied:

Reviewed-by: Borislav Petkov <bp@xxxxxxx>

---
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 26380627e7f9..7b3b199e15a1 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -1189,8 +1189,8 @@ static __init int svm_hardware_setup(void)

static int sev_platform_get_state(int *state, int *error)
{
- int ret;
struct sev_data_status *data;
+ int ret;

data = kzalloc(sizeof(*data), GFP_KERNEL);
if (!data)
@@ -1201,7 +1201,7 @@ static int sev_platform_get_state(int *state, int *error)
*state = data->state;

pr_info_once("SEV firmware major %d minor %d build %d\n",
- data->api_major, data->api_minor, data->build);
+ data->api_major, data->api_minor, data->build);

kfree(data);
return ret;
@@ -5577,6 +5577,7 @@ static int sev_guest_init(struct kvm *kvm, struct kvm_sev_cmd *argp)

sev->active = true;
sev->asid = asid;
+
return 0;

e_shutdown:
@@ -5598,17 +5599,19 @@ static int svm_mem_enc_op(struct kvm *kvm, void __user *argp)
mutex_lock(&kvm->lock);

switch (sev_cmd.id) {
- case KVM_SEV_INIT: {
+ case KVM_SEV_INIT:
r = sev_guest_init(kvm, &sev_cmd);
break;
- }
+
default:
break;
}

mutex_unlock(&kvm->lock);
+
if (copy_to_user(argp, &sev_cmd, sizeof(struct kvm_sev_cmd)))
r = -EFAULT;
+
return r;
}


--
Regards/Gruss,
Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.