lkml.org 
[lkml]   [2019]   [Nov]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 77/95] HID: fix error message in hid_open_report()
    Date
    From: Michał Mirosław <mirq-linux@rere.qmqm.pl>

    commit b3a81c777dcb093020680490ab970d85e2f6f04f upstream.

    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: 8c3d52fc393b ("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>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/hid/hid-core.c | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    --- a/drivers/hid/hid-core.c
    +++ b/drivers/hid/hid-core.c
    @@ -979,6 +979,7 @@ int hid_open_report(struct hid_device *d
    __u8 *start;
    __u8 *buf;
    __u8 *end;
    + __u8 *next;
    int ret;
    static int (*dispatch_type[])(struct hid_parser *parser,
    struct hid_item *item) = {
    @@ -1032,7 +1033,8 @@ int hid_open_report(struct hid_device *d
    device->collection_size = HID_DEFAULT_NUM_COLLECTIONS;

    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) {
    hid_err(device, "unexpected long global item\n");
    @@ -1061,7 +1063,8 @@ int hid_open_report(struct hid_device *d
    }
    }

    - 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:
    vfree(parser);
    hid_close_report(device);

    \
     
     \ /
      Last update: 2019-11-04 22:58    [W:4.443 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site