From: sashiko-bot@kernel.org
To: "Gui-Dong Han" <hanguidong02@gmail.com>
Cc: linux-hwmon@vger.kernel.org
Subject: Re: [PATCH 3/3] hwmon: (adm1031) Serialize update rate changes
Date: Thu, 16 Apr 2026 12:21:31 +0000 [thread overview]
Message-ID: <20260416122131.A220FC2BCAF@smtp.kernel.org> (raw)
In-Reply-To: <20260416091754.310-3-hanguidong02@gmail.com>
Sashiko AI review found 1 potential issue(s):
- [High] Missing I2C error handling leads to hardware register corruption and state desynchronization.
--
commit ffbce3cc3043a4bfb1c8f7ba4a9010b9c8a23c2c
Author: Gui-Dong Han <hanguidong02@gmail.com>
hwmon: (adm1031) Serialize update rate changes
This commit expands the locked section in update_interval_store() to cover
the hardware register read-modify-write sequence and the software state
update. This ensures the hardware updates and cached state updates occur
together.
> diff --git a/drivers/hwmon/adm1031.c b/drivers/hwmon/adm1031.c
> index 887fba9ea149f..a46db83471f2c 100644
> --- a/drivers/hwmon/adm1031.c
> +++ b/drivers/hwmon/adm1031.c
[ ... ]
> @@ -897,13 +897,14 @@ static ssize_t update_interval_store(struct device *dev,
> }
> /* if not found, we point to the last entry (lowest update interval) */
>
> + mutex_lock(&data->update_lock);
> +
> /* set the new update rate while preserving other settings */
> reg = adm1031_read_value(client, ADM1031_REG_FAN_FILTER);
Could the truncation of the error code lead to register corruption?
Looking at adm1031_read_value(), it returns a u8:
static inline u8 adm1031_read_value(struct i2c_client *client, u8 reg)
{
return i2c_smbus_read_byte_data(client, reg);
}
If i2c_smbus_read_byte_data() returns a negative error code like -EIO, it gets
silently truncated to an 8-bit value (like 0xFB). This garbage value is then
masked, modified, and written back to the register.
> reg &= ~ADM1031_UPDATE_RATE_MASK;
> reg |= i << ADM1031_UPDATE_RATE_SHIFT;
> adm1031_write_value(client, ADM1031_REG_FAN_FILTER, reg);
Does ignoring the return value of adm1031_write_value() leave the software
and hardware states desynchronized?
If the I2C write fails, data->update_interval is updated anyway, meaning
the cached software state no longer matches the actual hardware state
despite the expanded lock.
> - mutex_lock(&data->update_lock);
> data->update_interval = update_intervals[i];
> mutex_unlock(&data->update_lock);
>
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260416091754.310-1-hanguidong02@gmail.com?part=3
next prev parent reply other threads:[~2026-04-16 12:21 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-16 9:17 [PATCH 1/3] hwmon: (adm1031) Convert macros to functions to avoid TOCTOU Gui-Dong Han
2026-04-16 9:17 ` [PATCH 2/3] hwmon: (adm1031) Hold lock while reading cached data Gui-Dong Han
2026-04-16 11:57 ` sashiko-bot
2026-04-16 13:02 ` Gui-Dong Han
2026-04-16 9:17 ` [PATCH 3/3] hwmon: (adm1031) Serialize update rate changes Gui-Dong Han
2026-04-16 12:21 ` sashiko-bot [this message]
2026-04-16 13:05 ` Gui-Dong Han
2026-04-16 14:05 ` Guenter Roeck
2026-04-16 14:32 ` Gui-Dong Han
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260416122131.A220FC2BCAF@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=hanguidong02@gmail.com \
--cc=linux-hwmon@vger.kernel.org \
--cc=sashiko@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.