diff mbox series

HID: uclogic: Fix frame templates for big endian architectures

Message ID 20221110174918.398567-1-jose.exposito89@gmail.com (mailing list archive)
State Mainlined
Commit a6f4f1662711bd03308371d9649783a5be596898
Delegated to: Jiri Kosina
Headers show
Series HID: uclogic: Fix frame templates for big endian architectures | expand

Commit Message

José Expósito Nov. 10, 2022, 5:49 p.m. UTC
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>
---
 drivers/hid/hid-uclogic-rdesc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jiri Kosina Nov. 14, 2022, 2:03 p.m. UTC | #1
On Thu, 10 Nov 2022, José Expósito wrote:

> 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>
> ---
>  drivers/hid/hid-uclogic-rdesc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/hid/hid-uclogic-rdesc.c b/drivers/hid/hid-uclogic-rdesc.c
> index 4bd54c4fb5b0..6b73eb0df6bd 100644
> --- a/drivers/hid/hid-uclogic-rdesc.c
> +++ b/drivers/hid/hid-uclogic-rdesc.c
> @@ -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 {

Applied to hid.git#for-6.1/upstream-fixes, thanks José.
diff mbox series

Patch

diff --git a/drivers/hid/hid-uclogic-rdesc.c b/drivers/hid/hid-uclogic-rdesc.c
index 4bd54c4fb5b0..6b73eb0df6bd 100644
--- a/drivers/hid/hid-uclogic-rdesc.c
+++ b/drivers/hid/hid-uclogic-rdesc.c
@@ -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++;