Commit 680ee41
HID: logitech-hidpp: Fix connect event race
There is a connect event race in hidpp_probe() in these 2 lines:
connected = hidpp_root_get_protocol_version(hidpp) == 0;
atomic_set(&hidpp->connected, connected);
Specifically the following can happen:
1. This line from hidpp_probe() is executed:
connected = hidpp_root_get_protocol_version(hidpp) == 0;
and sets connected to false;
2. A connect-event packet is received and does:
atomic_set(&hidpp->connected, true);
3. The next line from hidpp_probe() is executed:
atomic_set(&hidpp->connected, connected);
and sets the atomic_t back to 0 again.
4. hidpp_connect_event() runs and sees the connected device
as disconnected because of this.
To fix this make hidpp_connect_event() query the connection status
of the device itself instead of having it rely on possibly stale
data cached in struct hidpp_device.
This series has been tested on the following devices:
Logitech Bluetooth Laser Travel Mouse (bluetooth, HID++ 1.0)
Logitech M720 Triathlon (bluetooth, HID++ 4.5)
Logitech M720 Triathlon (unifying, HID++ 4.5)
Logitech K400 Pro (unifying, HID++ 4.1)
Logitech K270 (eQUAD nano Lite, HID++ 2.0)
Logitech M185 (eQUAD nano Lite, HID++ 4.5)
Logitech LX501 keyboard (27 Mhz, HID++ builtin scroll-wheel, HID++ 1.0)
Logitech M-RAZ105 mouse (27 Mhz, HID++ extra mouse buttons, HID++ 1.0)
And by bentiss:
Logitech Touchpad T650 (unifying)
Logitech Touchpad T651 (bluetooth)
Logitech MX Master 3B (BLE)
Logitech G403 (plain USB / Gaming receiver)
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20231010102029.111003-11-hdegoede@redhat.com
Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>1 parent bb17b2c commit 680ee41
1 file changed
Lines changed: 5 additions & 20 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
194 | 194 | | |
195 | 195 | | |
196 | 196 | | |
197 | | - | |
198 | 197 | | |
199 | 198 | | |
200 | 199 | | |
| |||
3893 | 3892 | | |
3894 | 3893 | | |
3895 | 3894 | | |
3896 | | - | |
3897 | | - | |
3898 | 3895 | | |
3899 | 3896 | | |
3900 | 3897 | | |
| |||
4189 | 4186 | | |
4190 | 4187 | | |
4191 | 4188 | | |
4192 | | - | |
4193 | | - | |
4194 | 4189 | | |
4195 | 4190 | | |
| 4191 | + | |
4196 | 4192 | | |
4197 | | - | |
| 4193 | + | |
| 4194 | + | |
| 4195 | + | |
| 4196 | + | |
4198 | 4197 | | |
4199 | 4198 | | |
4200 | 4199 | | |
| |||
4236 | 4235 | | |
4237 | 4236 | | |
4238 | 4237 | | |
4239 | | - | |
4240 | | - | |
4241 | | - | |
4242 | | - | |
4243 | | - | |
4244 | | - | |
4245 | | - | |
4246 | | - | |
4247 | | - | |
4248 | | - | |
4249 | 4238 | | |
4250 | 4239 | | |
4251 | 4240 | | |
| |||
4395 | 4384 | | |
4396 | 4385 | | |
4397 | 4386 | | |
4398 | | - | |
4399 | 4387 | | |
4400 | 4388 | | |
4401 | 4389 | | |
| |||
4485 | 4473 | | |
4486 | 4474 | | |
4487 | 4475 | | |
4488 | | - | |
4489 | | - | |
4490 | | - | |
4491 | 4476 | | |
4492 | 4477 | | |
4493 | 4478 | | |
| |||
0 commit comments