diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c index c7cff929b4190874790602119498e9331537956d..723069a41f5a58c5bfd3420cfbef731195f97cbd 100644 --- a/drivers/hid/hidraw.c +++ b/drivers/hid/hidraw.c @@ -357,6 +357,11 @@ static int hidraw_release(struct inode * inode, struct file * file) mutex_lock(&minors_lock); spin_lock_irqsave(&hidraw_table[minor]->list_lock, flags); + while (list->tail != list->head) { + kfree(list->buffer[list->tail].value); + list->buffer[list->tail].value = NULL; + list->tail = (list->tail + 1) & (HIDRAW_BUFFER_SIZE - 1); + } list_del(&list->node); spin_unlock_irqrestore(&hidraw_table[minor]->list_lock, flags); kfree(list);