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, |