]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: SEV: use mutex guard in snp_launch_update()
authorCarlos López <clopez@suse.de>
Tue, 10 Mar 2026 23:48:24 +0000 (16:48 -0700)
committerSean Christopherson <seanjc@google.com>
Thu, 9 Apr 2026 19:00:20 +0000 (12:00 -0700)
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>
arch/x86/kvm/svm/sev.c

index 57f3ec36b62a0d69bc599cac1f2a97cd85da8702..96510b1ec4cc967547043500de27f516d36a3275 100644 (file)
@@ -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), &params, 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), &params, sizeof(params)))
+               return -EFAULT;
+
+       return 0;
 }
 
 static int snp_launch_update_vmsa(struct kvm *kvm, struct kvm_sev_cmd *argp)