hwmon: (corsair-cpro) Protect ccp->wait_input_report with a spinlock
authorAleksa Savic <savicaleksa83@gmail.com>
Sat, 4 May 2024 09:25:03 +0000 (11:25 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 17 May 2024 09:50:58 +0000 (11:50 +0200)
commitbb739796564a022c4ea8353bee7a6a400df6d44c
treea1cc9f71fa4363c8fe6a5bd74f4f47bd3f90367b
parent073ca0c27b36a0c89f3207016b340852ebe6c17c
hwmon: (corsair-cpro) Protect ccp->wait_input_report with a spinlock

[ Upstream commit d02abd57e79469a026213f7f5827a98d909f236a ]

Through hidraw, userspace can cause a status report to be sent
from the device. The parsing in ccp_raw_event() may happen in
parallel to a send_usb_cmd() call (which resets the completion
for tracking the report) if it's running on a different CPU where
bottom half interrupts are not disabled.

Add a spinlock around the complete_all() in ccp_raw_event() and
reinit_completion() in send_usb_cmd() to prevent race issues.

Fixes: 40c3a4454225 ("hwmon: add Corsair Commander Pro driver")
Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
Acked-by: Marius Zachmann <mail@mariuszachmann.de>
Link: https://lore.kernel.org/r/20240504092504.24158-4-savicaleksa83@gmail.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/hwmon/corsair-cpro.c