Commit 17ee873d authored by Oliver Neukum's avatar Oliver Neukum Committed by Jiri Kosina
Browse files

HID: hid-sjoy: race between init and usage



The driver uses an initial IO to set the device to a default
state. That initialization is currently being done after the device
node has been created. That means that the single buffer used
for output can be altered while IO is in progress.
Move the intialization before announcement to user space.

Fixes: fac733f0 ("HID: force feedback support for SmartJoy PLUS PS2/USB adapter")
Signed-off-by: default avatarOliver Neukum <oneukum@suse.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.com>
parent 48735928
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -91,17 +91,17 @@ static int sjoyff_init(struct hid_device *hid)

		set_bit(FF_RUMBLE, dev->ffbit);

		error = input_ff_create_memless(dev, sjoyff, hid_sjoyff_play);
		if (error) {
			kfree(sjoyff);
			return error;
		}

		sjoyff->report = report;
		sjoyff->report->field[0]->value[0] = 0x01;
		sjoyff->report->field[0]->value[1] = 0x00;
		sjoyff->report->field[0]->value[2] = 0x00;
		hid_hw_request(hid, sjoyff->report, HID_REQ_SET_REPORT);

		error = input_ff_create_memless(dev, sjoyff, hid_sjoyff_play);
		if (error) {
			kfree(sjoyff);
			return error;
		}
	}

	hid_info(hid, "Force feedback for SmartJoy PLUS PS2/USB adapter\n");