mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
KVM: SEV: use mutex guard in snp_launch_update()
Simplify the error paths in snp_launch_update() by using a mutex guard, allowing early return instead of using gotos. Signed-off-by: Carlos López <clopez@suse.de> Link: https://patch.msgid.link/20260120201013.3931334-4-clopez@suse.de Link: https://patch.msgid.link/20260310234829.2608037-17-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
ba903f7382
commit
04d77ded64
|
|
@ -2407,7 +2407,6 @@ static int snp_launch_update(struct kvm *kvm, struct kvm_sev_cmd *argp)
|
|||
struct kvm_memory_slot *memslot;
|
||||
long npages, count;
|
||||
void __user *src;
|
||||
int ret = 0;
|
||||
|
||||
if (!sev_snp_guest(kvm) || !sev->snp_context)
|
||||
return -EINVAL;
|
||||
|
|
@ -2452,13 +2451,11 @@ static int snp_launch_update(struct kvm *kvm, struct kvm_sev_cmd *argp)
|
|||
* initial expected state and better guard against unexpected
|
||||
* situations.
|
||||
*/
|
||||
mutex_lock(&kvm->slots_lock);
|
||||
guard(mutex)(&kvm->slots_lock);
|
||||
|
||||
memslot = gfn_to_memslot(kvm, params.gfn_start);
|
||||
if (!kvm_slot_has_gmem(memslot)) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
if (!kvm_slot_has_gmem(memslot))
|
||||
return -EINVAL;
|
||||
|
||||
sev_populate_args.sev_fd = argp->sev_fd;
|
||||
sev_populate_args.type = params.type;
|
||||
|
|
@ -2469,22 +2466,18 @@ static int snp_launch_update(struct kvm *kvm, struct kvm_sev_cmd *argp)
|
|||
argp->error = sev_populate_args.fw_error;
|
||||
pr_debug("%s: kvm_gmem_populate failed, ret %ld (fw_error %d)\n",
|
||||
__func__, count, argp->error);
|
||||
ret = -EIO;
|
||||
} else {
|
||||
params.gfn_start += count;
|
||||
params.len -= count * PAGE_SIZE;
|
||||
if (params.type != KVM_SEV_SNP_PAGE_TYPE_ZERO)
|
||||
params.uaddr += count * PAGE_SIZE;
|
||||
|
||||
ret = 0;
|
||||
if (copy_to_user(u64_to_user_ptr(argp->data), ¶ms, sizeof(params)))
|
||||
ret = -EFAULT;
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
out:
|
||||
mutex_unlock(&kvm->slots_lock);
|
||||
params.gfn_start += count;
|
||||
params.len -= count * PAGE_SIZE;
|
||||
if (params.type != KVM_SEV_SNP_PAGE_TYPE_ZERO)
|
||||
params.uaddr += count * PAGE_SIZE;
|
||||
|
||||
return ret;
|
||||
if (copy_to_user(u64_to_user_ptr(argp->data), ¶ms, sizeof(params)))
|
||||
return -EFAULT;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int snp_launch_update_vmsa(struct kvm *kvm, struct kvm_sev_cmd *argp)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user