HID: fix error message in hid_open_report()
On HID report descriptor parsing error the code displays bogus
pointer instead of error offset (subtracts start=NULL from end).
Make the message more useful by displaying correct error offset
and include total buffer size for reference.
This was carried over from ancient times - "Fixed" commit just
promoted the message from DEBUG to ERROR.
Cc: stable@vger.kernel.org
Fixes: 8c3d52fc39
("HID: make parser more verbose about parsing errors by default")
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
1ad0bc7894
commit
b3a81c777d
|
@ -1139,6 +1139,7 @@ int hid_open_report(struct hid_device *device)
|
||||||
__u8 *start;
|
__u8 *start;
|
||||||
__u8 *buf;
|
__u8 *buf;
|
||||||
__u8 *end;
|
__u8 *end;
|
||||||
|
__u8 *next;
|
||||||
int ret;
|
int ret;
|
||||||
static int (*dispatch_type[])(struct hid_parser *parser,
|
static int (*dispatch_type[])(struct hid_parser *parser,
|
||||||
struct hid_item *item) = {
|
struct hid_item *item) = {
|
||||||
|
@ -1192,7 +1193,8 @@ int hid_open_report(struct hid_device *device)
|
||||||
device->collection_size = HID_DEFAULT_NUM_COLLECTIONS;
|
device->collection_size = HID_DEFAULT_NUM_COLLECTIONS;
|
||||||
|
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
while ((start = fetch_item(start, end, &item)) != NULL) {
|
while ((next = fetch_item(start, end, &item)) != NULL) {
|
||||||
|
start = next;
|
||||||
|
|
||||||
if (item.format != HID_ITEM_FORMAT_SHORT) {
|
if (item.format != HID_ITEM_FORMAT_SHORT) {
|
||||||
hid_err(device, "unexpected long global item\n");
|
hid_err(device, "unexpected long global item\n");
|
||||||
|
@ -1230,7 +1232,8 @@ int hid_open_report(struct hid_device *device)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hid_err(device, "item fetching failed at offset %d\n", (int)(end - start));
|
hid_err(device, "item fetching failed at offset %u/%u\n",
|
||||||
|
size - (unsigned int)(end - start), size);
|
||||||
err:
|
err:
|
||||||
kfree(parser->collection_stack);
|
kfree(parser->collection_stack);
|
||||||
alloc_err:
|
alloc_err:
|
||||||
|
|
Loading…
Reference in New Issue