--- linux-2.6.1-orig/drivers/usb/input/hid-core.c	2004-01-08 22:59:44.000000000 -0800
+++ linux-2.6.1/drivers/usb/input/hid-core.c	2004-01-21 12:47:46.000000000 -0800
@@ -224,6 +224,9 @@
 	offset = report->size;
 	report->size += parser->global.report_size * parser->global.report_count;
 
+	if (usages < parser->global.report_count)
+		usages = parser->global.report_count;
+
 	if (usages == 0)
 		return 0; /* ignore padding fields */
 
@@ -234,7 +237,7 @@
 	field->logical = hid_lookup_collection(parser, HID_COLLECTION_LOGICAL);
 	field->application = hid_lookup_collection(parser, HID_COLLECTION_APPLICATION);
 
-	for (i = 0; i < usages; i++) {
+	for (i = 0; i < parser->local.usage_index; i++) {
 		field->usage[i].hid = parser->local.usage[i];
 		field->usage[i].collection_index =
 			parser->local.collection_index[i];
