mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 08:15:07 -04:00
hwmon: (nzxt-smart2) Check return value of init_device() in probe
The init_device() call in nzxt_smart2_hid_probe() can fail because it sends HID output reports to the hardware to detect fans and set the update interval. If the hardware is not responding or the HID reports fail, init_device() returns a negative error code. However, the return value was ignored, causing the probe to continue and register an hwmon device even though the device was never properly initialized. This leads to an inconsistent state where the driver reports stale data or blocks on wait queues that will never be woken. The same function's return value is already checked in the reset_resume() handler, confirming the author's intent that errors should be propagated. Note that this fix was not possible before commit59d104b54b("hwmon: (nzxt-smart2) Stop device IO before calling hid_hw_stop") because the out_hw_close error path was missing hid_device_io_stop(), which would have opened a use-after-free risk window. Fixes:53e68c20ae("hwmon: add driver for NZXT RGB&Fan Controller/Smart Device v2.") Signed-off-by: Qingshuang Fu <fuqingshuang@kylinos.cn> Link: https://lore.kernel.org/r/20260804074842.505923-1-fffsqian@163.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
committed by
Guenter Roeck
parent
59bd68ab05
commit
d533882ce1
@@ -754,7 +754,11 @@ static int nzxt_smart2_hid_probe(struct hid_device *hdev,
|
||||
|
||||
hid_device_io_start(hdev);
|
||||
|
||||
init_device(drvdata, UPDATE_INTERVAL_DEFAULT_MS);
|
||||
ret = init_device(drvdata, UPDATE_INTERVAL_DEFAULT_MS);
|
||||
if (ret) {
|
||||
dev_err(&hdev->dev, "init_device failed: %d\n", ret);
|
||||
goto out_hw_close;
|
||||
}
|
||||
|
||||
drvdata->hwmon =
|
||||
hwmon_device_register_with_info(&hdev->dev, "nzxtsmart2", drvdata,
|
||||
|
||||
Reference in New Issue
Block a user