Sony Dualshock 4 usb dongle crashes the whole system
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linux (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Focal |
Fix Released
|
Medium
|
Alex Hung | ||
Groovy |
Won't Fix
|
Undecided
|
Unassigned |
Bug Description
[Impact]
Sony Dualshock 4 controller crashes systems. This is the result of a
divide by zero when the driver processes requests from Steam and returns
invalid data. More details are in the patch description.
[Fix]
Check whether data is valid and retry up to 3 times if needed.
[Test Case]
Tested by the bug reporter of LP:1935846. No more crashes after applying
this patch.
[Where problems could occur]
None. The patch checks whether data is valid and retry 3 times before
return -EILSEQ if it still fails.
== Original descriptions ==
The hid-sony driver has custom DS4 connect/disconnect logic for the
DS4 dongle, which is a USB dongle acting as a proxy to Bluetooth
connected DS4.
The connect/disconnect logic works fine generally, however not in
conjunction with Steam. Steam implements its own DS4 driver using
hidraw. Both hid-sony and Steam are issuing their own HID requests
and are racing each other during DS4 dongle connect/disconnect
resulting in a kernel crash in hid-sony.
The problem is that upon a DS4 connect to the dongle, hid-sony kicks
of 'ds4_get_
The calibration code issues raw HID feature report for reportID 0x02.
When Steam is running, it issues a feature report for reportID 0x12
typically just prior to hid-sony requesting feature reportID 0x02.
The result is that 'ds4_get_
requested as that's the HID report returing first. Currently this
results in it processing invalid data, which ultimately results in a
divide by zero upon a future 'dualshock4_
The solution for now is to check within 'ds4_get_
check if we received data for the feature report we issued and if not
retry.
Please consider to add this patch to Ubuntu LTS kernels.
Commit:
https:/
description: | updated |
Changed in linux (Ubuntu Focal): | |
status: | New → In Progress |
Changed in linux (Ubuntu Groovy): | |
status: | New → Won't Fix |
Changed in linux (Ubuntu): | |
status: | New → Fix Released |
Changed in linux (Ubuntu Focal): | |
assignee: | nobody → Alex Hung (alexhung) |
assignee: | Alex Hung (alexhung) → nobody |
Changed in linux (Ubuntu): | |
assignee: | nobody → Alex Hung (alexhung) |
assignee: | Alex Hung (alexhung) → nobody |
Changed in linux (Ubuntu Focal): | |
assignee: | nobody → Alex Hung (alexhung) |
Changed in linux (Ubuntu Focal): | |
importance: | Undecided → Medium |
Changed in linux (Ubuntu Focal): | |
status: | In Progress → Fix Committed |
tags: |
added: verification-done-focal removed: verification-needed-focal |
I assume you were referring to LTS kernel 5.4 used in Ubuntu20.04.
I compiled a kernel with the proposed commit in below link. Let me know whether it fixes your problem and I will submit a SRU to kernel 5.4 if it does.
https:/ /people. canonical. com/~alexhung/ LP1935846/