HID: pidff: Fix condition effect bit clearing

As reported by MPDarkGuy on discord, NULL pointer dereferences were
happening because not all the conditional effects bits were cleared.

Properly clear all conditional effect bits from ffbit

Fixes: 7f3d7bc0df ("HID: pidff: Better quirk assigment when searching for fields")
Cc: stable@vger.kernel.org # 6.18.x
Signed-off-by: Tomasz Pakuła <tomasz.pakula.oficjalny@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
This commit is contained in:
Tomasz Pakuła 2026-02-04 22:44:55 +01:00 committed by Jiri Kosina
parent ecfa6f3449
commit 97d5c8f5c0

View file

@ -1452,10 +1452,13 @@ static int pidff_init_fields(struct pidff_device *pidff, struct input_dev *dev)
hid_warn(pidff->hid, "unknown ramp effect layout\n");
if (PIDFF_FIND_FIELDS(set_condition, PID_SET_CONDITION, 1)) {
if (test_and_clear_bit(FF_SPRING, dev->ffbit) ||
test_and_clear_bit(FF_DAMPER, dev->ffbit) ||
test_and_clear_bit(FF_FRICTION, dev->ffbit) ||
test_and_clear_bit(FF_INERTIA, dev->ffbit))
bool test = false;
test |= test_and_clear_bit(FF_SPRING, dev->ffbit);
test |= test_and_clear_bit(FF_DAMPER, dev->ffbit);
test |= test_and_clear_bit(FF_FRICTION, dev->ffbit);
test |= test_and_clear_bit(FF_INERTIA, dev->ffbit);
if (test)
hid_warn(pidff->hid, "unknown condition effect layout\n");
}