HID: uclogic: Fix frame templates for big endian architectures
authorJosé Expósito <jose.exposito89@gmail.com>
Thu, 10 Nov 2022 17:49:18 +0000 (18:49 +0100)
committerJiri Kosina <jkosina@suse.cz>
Mon, 14 Nov 2022 14:02:38 +0000 (15:02 +0100)
When parsing a frame template with a placeholder indicating the number
of buttons present on the frame its value was incorrectly set on big
endian architectures due to double little endian conversion.

In order to reproduce the issue and verify the fix, run the HID KUnit
tests on the PowerPC architecture:

  $ ./tools/testing/kunit/kunit.py run --kunitconfig=drivers/hid \
    --arch=powerpc --cross_compile=powerpc64-linux-gnu-

Fixes: 867c89254425 ("HID: uclogic: Allow to generate frame templates")
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-uclogic-rdesc.c

index 4bd54c4fb5b0baca541d6b54e98e1052cf680a8a..6b73eb0df6bd73cc9f06e4433cf26135c29430c8 100644 (file)
@@ -1193,7 +1193,7 @@ __u8 *uclogic_rdesc_template_apply(const __u8 *template_ptr,
                           p[sizeof(btn_head)] < param_num) {
                        v = param_list[p[sizeof(btn_head)]];
                        put_unaligned((__u8)0x2A, p); /* Usage Maximum */
-                       put_unaligned_le16((__force u16)cpu_to_le16(v), p + 1);
+                       put_unaligned((__force u16)cpu_to_le16(v), (s16 *)(p + 1));
                        p += sizeof(btn_head) + 1;
                } else {
                        p++;