Commit 04d77ded authored by Carlos López's avatar Carlos López Committed by Sean Christopherson
Browse files

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: default avatarCarlos 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: default avatarSean Christopherson <seanjc@google.com>
parent ba903f73
Loading
Loading
Loading
Loading
+12 −19
Original line number Diff line number Diff line
@@ -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 {
		return -EIO;
	}

	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), &params, sizeof(params)))
			ret = -EFAULT;
	}

out:
	mutex_unlock(&kvm->slots_lock);
		return -EFAULT;

	return ret;
	return 0;
}

static int snp_launch_update_vmsa(struct kvm *kvm, struct kvm_sev_cmd *argp)