| From a6f4f1662711bd03308371d9649783a5be596898 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= <jose.exposito89@gmail.com> |
| Date: Thu, 10 Nov 2022 18:49:18 +0100 |
| Subject: HID: uclogic: Fix frame templates for big endian architectures |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: José Expósito <jose.exposito89@gmail.com> |
| |
| commit a6f4f1662711bd03308371d9649783a5be596898 upstream. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/hid/hid-uclogic-rdesc.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/hid/hid-uclogic-rdesc.c |
| +++ b/drivers/hid/hid-uclogic-rdesc.c |
| @@ -1119,7 +1119,7 @@ __u8 *uclogic_rdesc_template_apply(const |
| 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++; |