Commit 97d5c8f5 authored by Tomasz Pakuła's avatar Tomasz Pakuła Committed by Jiri Kosina
Browse files

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: 7f3d7bc0 ("HID: pidff: Better quirk assigment when searching for fields")
Cc: stable@vger.kernel.org # 6.18.x
Signed-off-by: default avatarTomasz Pakuła <tomasz.pakula.oficjalny@gmail.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.com>
parent ecfa6f34
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -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");
	}