diff options
Diffstat (limited to 'drivers/hid/hidraw.c')
| -rw-r--r-- | drivers/hid/hidraw.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c index 925992f549f0..8a4b32dca9f7 100644 --- a/drivers/hid/hidraw.c +++ b/drivers/hid/hidraw.c | |||
| @@ -218,9 +218,13 @@ static int hidraw_release(struct inode * inode, struct file * file) | |||
| 218 | unsigned int minor = iminor(inode); | 218 | unsigned int minor = iminor(inode); |
| 219 | struct hidraw *dev; | 219 | struct hidraw *dev; |
| 220 | struct hidraw_list *list = file->private_data; | 220 | struct hidraw_list *list = file->private_data; |
| 221 | int ret; | ||
| 221 | 222 | ||
| 222 | if (!hidraw_table[minor]) | 223 | mutex_lock(&minors_lock); |
| 223 | return -ENODEV; | 224 | if (!hidraw_table[minor]) { |
| 225 | ret = -ENODEV; | ||
| 226 | goto unlock; | ||
| 227 | } | ||
| 224 | 228 | ||
| 225 | list_del(&list->node); | 229 | list_del(&list->node); |
| 226 | dev = hidraw_table[minor]; | 230 | dev = hidraw_table[minor]; |
| @@ -233,10 +237,12 @@ static int hidraw_release(struct inode * inode, struct file * file) | |||
| 233 | kfree(list->hidraw); | 237 | kfree(list->hidraw); |
| 234 | } | 238 | } |
| 235 | } | 239 | } |
| 236 | |||
| 237 | kfree(list); | 240 | kfree(list); |
| 241 | ret = 0; | ||
| 242 | unlock: | ||
| 243 | mutex_unlock(&minors_lock); | ||
| 238 | 244 | ||
| 239 | return 0; | 245 | return ret; |
| 240 | } | 246 | } |
| 241 | 247 | ||
| 242 | static long hidraw_ioctl(struct file *file, unsigned int cmd, | 248 | static long hidraw_ioctl(struct file *file, unsigned int cmd, |
