HID: avoid '\0' in hid debugfs events file
authorBruno Prémont <bonbons@linux-vserver.org>
Mon, 15 Mar 2010 18:00:27 +0000 (19:00 +0100)
committerJiri Kosina <jkosina@suse.cz>
Tue, 16 Mar 2010 12:36:01 +0000 (13:36 +0100)
When dumping /sys/kernel/debug/hid/$device/events '\0' characters show up
(invisible if cat to console but shown by less or while looking at a dump
 file).  These are due to hid_debug_event() adding strlen()+1 bytes to the ring
buffer (e.g. including the trailing '\0').  Any roll-over causes a '\0' as well
as hid_debug_event() handles the ring buffers with HID_DEBUG_BUFSIZE-1 size
while hid_debug_events_read() handles it with full HID_DEBUG_BUFSIZE size.

Signed-off-by: Bruno Prémont <bonbons@linux-vserver.org>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-debug.c

index cd4ece6fdfb967b8fe89227742dd49e13b09df67..0c4e75573186ba08e78f7b301c20bcb749ffd80e 100644 (file)
@@ -564,10 +564,10 @@ void hid_debug_event(struct hid_device *hdev, char *buf)
        struct hid_debug_list *list;
 
        list_for_each_entry(list, &hdev->debug_list, node) {
-               for (i = 0; i <= strlen(buf); i++)
-                       list->hid_debug_buf[(list->tail + i) % (HID_DEBUG_BUFSIZE - 1)] =
+               for (i = 0; i < strlen(buf); i++)
+                       list->hid_debug_buf[(list->tail + i) % HID_DEBUG_BUFSIZE] =
                                buf[i];
-               list->tail = (list->tail + i) % (HID_DEBUG_BUFSIZE - 1);
+               list->tail = (list->tail + i) % HID_DEBUG_BUFSIZE;
         }
 }
 EXPORT_SYMBOL_GPL(hid_debug_event);