--- x/drivers/nfc/virtual_ncidev.c +++ y/drivers/nfc/virtual_ncidev.c @@ -156,10 +156,18 @@ static int virtual_ncidev_open(struct in return 0; } +static DEFINE_MUTEX(vnd_close_mutex); + static int virtual_ncidev_close(struct inode *inode, struct file *file) { - struct virtual_nci_dev *vdev = file->private_data; + struct virtual_nci_dev *vdev; + mutex_lock(&vnd_close_mutex); + vdev = file->private_data; + file->private_data = NULL; + mutex_unlock(&vnd_close_mutex); + if (!vdev) + return 0; nci_unregister_device(vdev->ndev); nci_free_device(vdev->ndev); mutex_destroy(&vdev->mtx);