diff options
Diffstat (limited to 'drivers/hid/usbhid/hiddev.c')
| -rw-r--r-- | drivers/hid/usbhid/hiddev.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c index 867e08433e4..433602aed46 100644 --- a/drivers/hid/usbhid/hiddev.c +++ b/drivers/hid/usbhid/hiddev.c @@ -265,9 +265,10 @@ static int hiddev_release(struct inode * inode, struct file * file)  static int hiddev_open(struct inode *inode, struct file *file)  {  	struct hiddev_list *list; -	int res; +	int res, i; -	int i = iminor(inode) - HIDDEV_MINOR_BASE; +	lock_kernel(); +	i = iminor(inode) - HIDDEV_MINOR_BASE;  	if (i >= HIDDEV_MINORS || i < 0 || !hiddev_table[i])  		return -ENODEV; @@ -313,10 +314,12 @@ static int hiddev_open(struct inode *inode, struct file *file)  			usbhid_open(hid);  		} +	unlock_kernel();  	return 0;  bail:  	file->private_data = NULL;  	kfree(list); +	unlock_kernel();  	return res;  }  |