diff options
-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 47d70c523d93..5a6f99b1db12 100644 --- a/drivers/hid/hidraw.c +++ b/drivers/hid/hidraw.c | |||
@@ -212,9 +212,13 @@ static int hidraw_release(struct inode * inode, struct file * file) | |||
212 | unsigned int minor = iminor(inode); | 212 | unsigned int minor = iminor(inode); |
213 | struct hidraw *dev; | 213 | struct hidraw *dev; |
214 | struct hidraw_list *list = file->private_data; | 214 | struct hidraw_list *list = file->private_data; |
215 | int ret; | ||
215 | 216 | ||
216 | if (!hidraw_table[minor]) | 217 | mutex_lock(&minors_lock); |
217 | return -ENODEV; | 218 | if (!hidraw_table[minor]) { |
219 | ret = -ENODEV; | ||
220 | goto unlock; | ||
221 | } | ||
218 | 222 | ||
219 | list_del(&list->node); | 223 | list_del(&list->node); |
220 | dev = hidraw_table[minor]; | 224 | dev = hidraw_table[minor]; |
@@ -227,10 +231,12 @@ static int hidraw_release(struct inode * inode, struct file * file) | |||
227 | kfree(list->hidraw); | 231 | kfree(list->hidraw); |
228 | } | 232 | } |
229 | } | 233 | } |
230 | |||
231 | kfree(list); | 234 | kfree(list); |
235 | ret = 0; | ||
236 | unlock: | ||
237 | mutex_unlock(&minors_lock); | ||
232 | 238 | ||
233 | return 0; | 239 | return ret; |
234 | } | 240 | } |
235 | 241 | ||
236 | static long hidraw_ioctl(struct file *file, unsigned int cmd, | 242 | static long hidraw_ioctl(struct file *file, unsigned int cmd, |