hog-lib: Check if Report ID is set before prepending it
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Wed, 20 Apr 2022 20:08:59 +0000 (13:08 -0700)
committerAyush Garg <ayush.garg@samsung.com>
Mon, 15 May 2023 09:25:54 +0000 (14:55 +0530)
Before prepending the Report ID check if it is non-zero:

BLUETOOTH SPECIFICATION Page 16 of 26
HID Service Specification

Report ID shall be nonzero in a Report Reference characteristic
descriptor where there is more than one instance of the Report
characteristic for any given Report Type.

Fixes: https://www.spinics.net/lists/linux-bluetooth/msg97262.html
Signed-off-by: Manika Shrivastava <manika.sh@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
profiles/input/hog-lib.c

index 1a33ad0..875af88 100755 (executable)
@@ -348,7 +348,14 @@ static void report_value_cb(const guint8 *pdu, guint16 len, gpointer user_data)
        ev.type = UHID_INPUT;
        buf = ev.u.input.data;
 
-       if (report->numbered) {
+       /* BLUETOOTH SPECIFICATION Page 16 of 26
+        * HID Service Specification
+        *
+        * Report ID shall be nonzero in a Report Reference characteristic
+        * descriptor where there is more than one instance of the Report
+        * characteristic for any given Report Type.
+        */
+       if (report->numbered && report->id) {
                buf[0] = report->id;
                len = MIN(len, sizeof(ev.u.input.data) - 1);
                memcpy(buf + 1, pdu, len);