Re: [PATCH] hwmon: (nzxt-smart2) Check return value of init_device() in probe
Guenter Roeck <[email protected]> Tue, 4 Aug 2026 14:08:14 -0700
| Newsgroups | org.kernel.vger.linux-hwmon,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On Tue, Aug 04, 2026 at 03:48:42PM +0800, Qingshuang Fu wrote: > From: Qingshuang Fu <[email protected]> > > 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 commit 59d104b54b0b > ("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: 53e68c20aeb1 ("hwmon: add driver for NZXT RGB&Fan Controller/Smart Device v2.") > Signed-off-by: Qingshuang Fu <[email protected]> Applied. Thanks, Guenter > --- > drivers/hwmon/nzxt-smart2.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > > base-commit: 848acc8ffe1b7cd5f1bf427b93069becfebc2c9d > > diff --git a/drivers/hwmon/nzxt-smart2.c b/drivers/hwmon/nzxt-smart2.c > index ff0c0bee0e83..efc78a8f58c8 100644 > --- a/drivers/hwmon/nzxt-smart2.c > +++ b/drivers/hwmon/nzxt-smart2.c > @@ -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,