[PATCH 17/31] hwmon: (pmbus/ltc4286) use 4-argument i2c_smbus_read_block_data()

From: Dmitry Torokhov

Date: Sat Oct 24 2026 - 23:09:26 EST


Pass sizeof(block_buffer) - 1 to i2c_smbus_read_block_data() in
ltc4286_probe() to leave room for the NUL terminator, and explicitly
terminate the buffer before comparing model strings.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>
---
drivers/hwmon/pmbus/ltc4286.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/hwmon/pmbus/ltc4286.c b/drivers/hwmon/pmbus/ltc4286.c
index 8190706d1beb..530eace926ae 100644
--- a/drivers/hwmon/pmbus/ltc4286.c
+++ b/drivers/hwmon/pmbus/ltc4286.c
@@ -155,7 +155,8 @@ static int ltc4286_probe(struct i2c_client *client)
u32 rsense;
int vrange_nval, vrange_oval;

- ret = i2c_smbus_read_block_data(client, PMBUS_MFR_ID, block_buffer);
+ ret = i2c_smbus_read_block_data(client, PMBUS_MFR_ID,
+ sizeof(block_buffer) - 1, block_buffer);
if (ret < 0) {
return dev_err_probe(&client->dev, ret,
"Failed to read manufacturer id\n");
@@ -171,12 +172,15 @@ static int ltc4286_probe(struct i2c_client *client)
"Manufacturer id mismatch\n");
}

- ret = i2c_smbus_read_block_data(client, PMBUS_MFR_MODEL, block_buffer);
+ ret = i2c_smbus_read_block_data(client, PMBUS_MFR_MODEL,
+ sizeof(block_buffer) - 1, block_buffer);
if (ret < 0) {
return dev_err_probe(&client->dev, ret,
"Failed to read manufacturer model\n");
}

+ block_buffer[ret] = '\0';
+
for (mid = ltc4286_id; mid->name[0]; mid++) {
if (!strncasecmp(mid->name, block_buffer, strlen(mid->name)))
break;

--
2.56.0.257.gf7497c7d27-goog