lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:	Fri, 23 Oct 2015 21:20:58 -0400
From:	Chris <coderight+lkml@...il.com>
To:	linux-kernel@...r.kernel.org
Subject: hid-sony appears to be broken for some (new?) DualShock 4 controllers

I have a brand new DualShock 4 and the descriptor is a different size 
than what the hid-sony driver expects. This causes the controller to not 
work at all over wireless except for the trackpad. On USB it sort of 
works but the motion sense does not. This affects kernels starting at 
3.15 all the way to the current 4.3rc6.

In sony_report_fixup() it looks for a size of 467 for USB or 357 for 
Bluetooth but my controller's descriptor size is 499 USB and 365 BT.

I changed the sizes and the controller seems to be fully functional now. 
Is the descriptor size check actually even necessary? Don't all DS4's 
require the modified descriptor table regardless? I don't know.

These are the changes I made against 4.3rc6:
---
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
index 661f94f..d93a6a8 100644
--- a/drivers/hid/hid-sony.c
+++ b/drivers/hid/hid-sony.c
@@ -1137,11 +1137,11 @@ static __u8 *sony_report_fixup(struct hid_device 
*hdev, __u8 *rdesc,
          * the gyroscope values to corresponding axes so we need a
          * modified one.
          */
-       if ((sc->quirks & DUALSHOCK4_CONTROLLER_USB) && *rsize == 467) {
+       if ((sc->quirks & DUALSHOCK4_CONTROLLER_USB) && (*rsize == 467 
|| *rsize == 499)) {
                 hid_info(hdev, "Using modified Dualshock 4 report 
descriptor with gyroscope axes\n");
                 rdesc = dualshock4_usb_rdesc;
                 *rsize = sizeof(dualshock4_usb_rdesc);
-       } else if ((sc->quirks & DUALSHOCK4_CONTROLLER_BT) && *rsize == 
357) {
+       } else if ((sc->quirks & DUALSHOCK4_CONTROLLER_BT) && (*rsize == 
357 || *rsize == 365)) {
                 hid_info(hdev, "Using modified Dualshock 4 Bluetooth 
report descriptor\n");
                 rdesc = dualshock4_bt_rdesc;
                 *rsize = sizeof(dualshock4_bt_rdesc);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ