kvm-s390.c (ef11c9463ae006302ce170a401854a48ea0532ca) | kvm-s390.c (0e1234c02b77ef22d9cf78f86b98347ceb170090) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * hosting IBM Z kernel virtual machines (s390x) 4 * 5 * Copyright IBM Corp. 2008, 2020 6 * 7 * Author(s): Carsten Otte <cotte@de.ibm.com> 8 * Christian Borntraeger <borntraeger@de.ibm.com> --- 4727 unchanged lines hidden (view full) --- 4736 break; 4737 default: 4738 r = -EINVAL; 4739 break; 4740 } 4741 return r; 4742} 4743 | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * hosting IBM Z kernel virtual machines (s390x) 4 * 5 * Copyright IBM Corp. 2008, 2020 6 * 7 * Author(s): Carsten Otte <cotte@de.ibm.com> 8 * Christian Borntraeger <borntraeger@de.ibm.com> --- 4727 unchanged lines hidden (view full) --- 4736 break; 4737 default: 4738 r = -EINVAL; 4739 break; 4740 } 4741 return r; 4742} 4743 |
4744static long kvm_s390_guest_sida_op(struct kvm_vcpu *vcpu, 4745 struct kvm_s390_mem_op *mop) | 4744static long kvm_s390_vcpu_sida_op(struct kvm_vcpu *vcpu, 4745 struct kvm_s390_mem_op *mop) |
4746{ 4747 void __user *uaddr = (void __user *)mop->buf; 4748 int r = 0; 4749 4750 if (mop->flags || !mop->size) 4751 return -EINVAL; 4752 if (mop->size + mop->sida_offset < mop->size) 4753 return -EINVAL; --- 12 unchanged lines hidden (view full) --- 4766 case KVM_S390_MEMOP_SIDA_WRITE: 4767 if (copy_from_user((void *)(sida_origin(vcpu->arch.sie_block) + 4768 mop->sida_offset), uaddr, mop->size)) 4769 r = -EFAULT; 4770 break; 4771 } 4772 return r; 4773} | 4746{ 4747 void __user *uaddr = (void __user *)mop->buf; 4748 int r = 0; 4749 4750 if (mop->flags || !mop->size) 4751 return -EINVAL; 4752 if (mop->size + mop->sida_offset < mop->size) 4753 return -EINVAL; --- 12 unchanged lines hidden (view full) --- 4766 case KVM_S390_MEMOP_SIDA_WRITE: 4767 if (copy_from_user((void *)(sida_origin(vcpu->arch.sie_block) + 4768 mop->sida_offset), uaddr, mop->size)) 4769 r = -EFAULT; 4770 break; 4771 } 4772 return r; 4773} |
4774static long kvm_s390_guest_mem_op(struct kvm_vcpu *vcpu, 4775 struct kvm_s390_mem_op *mop) | 4774 4775static long kvm_s390_vcpu_mem_op(struct kvm_vcpu *vcpu, 4776 struct kvm_s390_mem_op *mop) |
4776{ 4777 void __user *uaddr = (void __user *)mop->buf; 4778 void *tmpbuf = NULL; 4779 int r = 0; 4780 const u64 supported_flags = KVM_S390_MEMOP_F_INJECT_EXCEPTION 4781 | KVM_S390_MEMOP_F_CHECK_ONLY 4782 | KVM_S390_MEMOP_F_SKEY_PROTECTION; 4783 --- 46 unchanged lines hidden (view full) --- 4830 4831 if (r > 0 && (mop->flags & KVM_S390_MEMOP_F_INJECT_EXCEPTION) != 0) 4832 kvm_s390_inject_prog_irq(vcpu, &vcpu->arch.pgm); 4833 4834 vfree(tmpbuf); 4835 return r; 4836} 4837 | 4777{ 4778 void __user *uaddr = (void __user *)mop->buf; 4779 void *tmpbuf = NULL; 4780 int r = 0; 4781 const u64 supported_flags = KVM_S390_MEMOP_F_INJECT_EXCEPTION 4782 | KVM_S390_MEMOP_F_CHECK_ONLY 4783 | KVM_S390_MEMOP_F_SKEY_PROTECTION; 4784 --- 46 unchanged lines hidden (view full) --- 4831 4832 if (r > 0 && (mop->flags & KVM_S390_MEMOP_F_INJECT_EXCEPTION) != 0) 4833 kvm_s390_inject_prog_irq(vcpu, &vcpu->arch.pgm); 4834 4835 vfree(tmpbuf); 4836 return r; 4837} 4838 |
4838static long kvm_s390_guest_memsida_op(struct kvm_vcpu *vcpu, 4839 struct kvm_s390_mem_op *mop) | 4839static long kvm_s390_vcpu_memsida_op(struct kvm_vcpu *vcpu, 4840 struct kvm_s390_mem_op *mop) |
4840{ 4841 int r, srcu_idx; 4842 4843 srcu_idx = srcu_read_lock(&vcpu->kvm->srcu); 4844 4845 switch (mop->op) { 4846 case KVM_S390_MEMOP_LOGICAL_READ: 4847 case KVM_S390_MEMOP_LOGICAL_WRITE: | 4841{ 4842 int r, srcu_idx; 4843 4844 srcu_idx = srcu_read_lock(&vcpu->kvm->srcu); 4845 4846 switch (mop->op) { 4847 case KVM_S390_MEMOP_LOGICAL_READ: 4848 case KVM_S390_MEMOP_LOGICAL_WRITE: |
4848 r = kvm_s390_guest_mem_op(vcpu, mop); | 4849 r = kvm_s390_vcpu_mem_op(vcpu, mop); |
4849 break; 4850 case KVM_S390_MEMOP_SIDA_READ: 4851 case KVM_S390_MEMOP_SIDA_WRITE: 4852 /* we are locked against sida going away by the vcpu->mutex */ | 4850 break; 4851 case KVM_S390_MEMOP_SIDA_READ: 4852 case KVM_S390_MEMOP_SIDA_WRITE: 4853 /* we are locked against sida going away by the vcpu->mutex */ |
4853 r = kvm_s390_guest_sida_op(vcpu, mop); | 4854 r = kvm_s390_vcpu_sida_op(vcpu, mop); |
4854 break; 4855 default: 4856 r = -EINVAL; 4857 } 4858 4859 srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx); 4860 return r; 4861} --- 146 unchanged lines hidden (view full) --- 5008 break; 5009 r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap); 5010 break; 5011 } 5012 case KVM_S390_MEM_OP: { 5013 struct kvm_s390_mem_op mem_op; 5014 5015 if (copy_from_user(&mem_op, argp, sizeof(mem_op)) == 0) | 4855 break; 4856 default: 4857 r = -EINVAL; 4858 } 4859 4860 srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx); 4861 return r; 4862} --- 146 unchanged lines hidden (view full) --- 5009 break; 5010 r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap); 5011 break; 5012 } 5013 case KVM_S390_MEM_OP: { 5014 struct kvm_s390_mem_op mem_op; 5015 5016 if (copy_from_user(&mem_op, argp, sizeof(mem_op)) == 0) |
5016 r = kvm_s390_guest_memsida_op(vcpu, &mem_op); | 5017 r = kvm_s390_vcpu_memsida_op(vcpu, &mem_op); |
5017 else 5018 r = -EFAULT; 5019 break; 5020 } 5021 case KVM_S390_SET_IRQ_STATE: { 5022 struct kvm_s390_irq_state irq_state; 5023 5024 r = -EFAULT; --- 161 unchanged lines hidden --- | 5018 else 5019 r = -EFAULT; 5020 break; 5021 } 5022 case KVM_S390_SET_IRQ_STATE: { 5023 struct kvm_s390_irq_state irq_state; 5024 5025 r = -EFAULT; --- 161 unchanged lines hidden --- |