aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2018-10-04 08:42:43 -0400
committerChristian Borntraeger <borntraeger@de.ibm.com>2018-10-05 04:04:03 -0400
commit8e41bd54317b04f2bf03012a4ca8ab7360c9beef (patch)
treebb97edd95eccb04613c13c530478ad7e9fb7af6d
parent492a6be197c0ddf9053ed30722ca11bf6637f011 (diff)
KVM: s390: fix locking for crypto setting error path
We need to unlock the kvm->lock mutex in the error case. Reported-by: smatch Fixes: 37940fb0b6a2c4bf101 ("KVM: s390: device attrs to enable/disable AP interpretation") Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Reviewed-by: Janosch Frank <frankja@linux.ibm.com> Reviewed-by: Pierre Morel <pmorel@linux.ibm.com> Reviewed-by: David Hildenbrand <david@redhat.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-rw-r--r--arch/s390/kvm/kvm-s390.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index a6230b00c1df..734d87d88eb3 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -859,8 +859,10 @@ static int kvm_s390_vm_set_crypto(struct kvm *kvm, struct kvm_device_attr *attr)
859 mutex_lock(&kvm->lock); 859 mutex_lock(&kvm->lock);
860 switch (attr->attr) { 860 switch (attr->attr) {
861 case KVM_S390_VM_CRYPTO_ENABLE_AES_KW: 861 case KVM_S390_VM_CRYPTO_ENABLE_AES_KW:
862 if (!test_kvm_facility(kvm, 76)) 862 if (!test_kvm_facility(kvm, 76)) {
863 mutex_unlock(&kvm->lock);
863 return -EINVAL; 864 return -EINVAL;
865 }
864 get_random_bytes( 866 get_random_bytes(
865 kvm->arch.crypto.crycb->aes_wrapping_key_mask, 867 kvm->arch.crypto.crycb->aes_wrapping_key_mask,
866 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask)); 868 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
@@ -868,8 +870,10 @@ static int kvm_s390_vm_set_crypto(struct kvm *kvm, struct kvm_device_attr *attr)
868 VM_EVENT(kvm, 3, "%s", "ENABLE: AES keywrapping support"); 870 VM_EVENT(kvm, 3, "%s", "ENABLE: AES keywrapping support");
869 break; 871 break;
870 case KVM_S390_VM_CRYPTO_ENABLE_DEA_KW: 872 case KVM_S390_VM_CRYPTO_ENABLE_DEA_KW:
871 if (!test_kvm_facility(kvm, 76)) 873 if (!test_kvm_facility(kvm, 76)) {
874 mutex_unlock(&kvm->lock);
872 return -EINVAL; 875 return -EINVAL;
876 }
873 get_random_bytes( 877 get_random_bytes(
874 kvm->arch.crypto.crycb->dea_wrapping_key_mask, 878 kvm->arch.crypto.crycb->dea_wrapping_key_mask,
875 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask)); 879 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));
@@ -877,16 +881,20 @@ static int kvm_s390_vm_set_crypto(struct kvm *kvm, struct kvm_device_attr *attr)
877 VM_EVENT(kvm, 3, "%s", "ENABLE: DEA keywrapping support"); 881 VM_EVENT(kvm, 3, "%s", "ENABLE: DEA keywrapping support");
878 break; 882 break;
879 case KVM_S390_VM_CRYPTO_DISABLE_AES_KW: 883 case KVM_S390_VM_CRYPTO_DISABLE_AES_KW:
880 if (!test_kvm_facility(kvm, 76)) 884 if (!test_kvm_facility(kvm, 76)) {
885 mutex_unlock(&kvm->lock);
881 return -EINVAL; 886 return -EINVAL;
887 }
882 kvm->arch.crypto.aes_kw = 0; 888 kvm->arch.crypto.aes_kw = 0;
883 memset(kvm->arch.crypto.crycb->aes_wrapping_key_mask, 0, 889 memset(kvm->arch.crypto.crycb->aes_wrapping_key_mask, 0,
884 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask)); 890 sizeof(kvm->arch.crypto.crycb->aes_wrapping_key_mask));
885 VM_EVENT(kvm, 3, "%s", "DISABLE: AES keywrapping support"); 891 VM_EVENT(kvm, 3, "%s", "DISABLE: AES keywrapping support");
886 break; 892 break;
887 case KVM_S390_VM_CRYPTO_DISABLE_DEA_KW: 893 case KVM_S390_VM_CRYPTO_DISABLE_DEA_KW:
888 if (!test_kvm_facility(kvm, 76)) 894 if (!test_kvm_facility(kvm, 76)) {
895 mutex_unlock(&kvm->lock);
889 return -EINVAL; 896 return -EINVAL;
897 }
890 kvm->arch.crypto.dea_kw = 0; 898 kvm->arch.crypto.dea_kw = 0;
891 memset(kvm->arch.crypto.crycb->dea_wrapping_key_mask, 0, 899 memset(kvm->arch.crypto.crycb->dea_wrapping_key_mask, 0,
892 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask)); 900 sizeof(kvm->arch.crypto.crycb->dea_wrapping_key_mask));