Re: [PATCH] s390/vfio-ap: do not use open locks during VFIO_GROUP_NOTIFY_SET_KVM notification

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 6/28/21 2:22 PM, Jason Gunthorpe wrote:
On Mon, Jun 28, 2021 at 02:20:55PM -0400, Tony Krowiak wrote:

On 6/28/21 1:34 PM, Jason Gunthorpe wrote:
On Fri, Jun 25, 2021 at 06:07:58PM -0400, Tony Krowiak wrote:
   static void vfio_ap_mdev_unset_kvm(struct ap_matrix_mdev *matrix_mdev)
   {
+	mutex_lock(&matrix_dev->lock);
+	if ((matrix_mdev->kvm) && (matrix_mdev->kvm->arch.crypto.crycbd)) {
   		mutex_unlock(&matrix_dev->lock);
+		down_write(&matrix_mdev->kvm->arch.crypto.pqap_hook_rwsem);
+		matrix_mdev->kvm->arch.crypto.pqap_hook = NULL;
+		up_write(&matrix_mdev->kvm->arch.crypto.pqap_hook_rwsem);
+		kvm_arch_crypto_clear_masks(matrix_mdev->kvm);
   		mutex_lock(&matrix_dev->lock);
   		vfio_ap_mdev_reset_queues(matrix_mdev->mdev);
   		kvm_put_kvm(matrix_mdev->kvm);
   		matrix_mdev->kvm = NULL;
+		mutex_unlock(&matrix_dev->lock);
   	}
Doesn't a flow exit the function with matrix_dev->lock held he

Yes, you are correct. Stupid mistake.

How can that happen? What flow?
When the if isn't taken

Write it with 'success oriented flow'
I'm not sure what you mean, can you clarify this statement?
Basically, don't write the bulk of the function under an if statement

mutex_lock(&matrix_dev->lock);
if (!matrix_mdev->kvm || !matrix_mdev->kvm->arch.crypto.crycbd) {
     mutex_unlock(&matrix_dev->lock);
     return;
}

Sure.


Jason





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Kernel Development]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Info]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Linux Media]     [Device Mapper]

  Powered by Linux