2024-02-07 21:26:30

by Javier Carrasco

[permalink] [raw]
Subject: [PATCH 0/2] hwmon: chipcap2: fix uninitialized symbols

Two static checker warnings have been found with Smatch[1] when checking
the chipcap2 driver. Two variables might be used uninitialized under
certain circumstances (explained in the commit messages).

This series fixes the two warnings and optimizes the error paths involved.

The fixes have been tested with Smatch (including cross function database),
and the bugs could not be reproduced anymore.

[1] https://lore.kernel.org/linux-hwmon/[email protected]/T/#t

Signed-off-by: Javier Carrasco <[email protected]>
---
Javier Carrasco (2):
hwmon: chipcap2: fix uninitialized variable in cc2_get_reg_val()
hwmon: chipcap2: fix return path in cc2_request_alarm_irqs()

drivers/hwmon/chipcap2.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
---
base-commit: 65f976a4299c5de2d2c9162c0337f95b7447243d
change-id: 20240207-chipcap2_init_vars-b39f8ca470be

Best regards,
--
Javier Carrasco <[email protected]>



2024-02-07 21:27:42

by Javier Carrasco

[permalink] [raw]
Subject: [PATCH 1/2] hwmon: chipcap2: fix uninitialized variable in cc2_get_reg_val()

The reg_val variable in cc2_get_reg_val() might be used without a known
value if cc2_read_reg() fails. That leads to a useless data conversion
because the returned error means the read operation failed and the data is
not relevant.

That makes its initial value irrelevant as well, so skip the data
conversion instead. If no error happens, a value is assigned to reg_val
and the data conversion is required.

Reported-by: Dan Carpenter <[email protected]>
Closes: https://lore.kernel.org/linux-hwmon/[email protected]/T/#t
Signed-off-by: Javier Carrasco <[email protected]>
---
drivers/hwmon/chipcap2.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/hwmon/chipcap2.c b/drivers/hwmon/chipcap2.c
index a62c507b1042..3b604fc5d8ae 100644
--- a/drivers/hwmon/chipcap2.c
+++ b/drivers/hwmon/chipcap2.c
@@ -324,7 +324,9 @@ static int cc2_get_reg_val(struct cc2_data *data, u8 reg, long *val)
int ret;

ret = cc2_read_reg(data, reg, &reg_val);
- *val = cc2_rh_convert(reg_val);
+ if (!ret)
+ *val = cc2_rh_convert(reg_val);
+
cc2_disable(data);

return ret;

--
2.40.1


2024-02-07 22:08:38

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH 1/2] hwmon: chipcap2: fix uninitialized variable in cc2_get_reg_val()

On Wed, Feb 07, 2024 at 10:17:08PM +0100, Javier Carrasco wrote:
> The reg_val variable in cc2_get_reg_val() might be used without a known
> value if cc2_read_reg() fails. That leads to a useless data conversion
> because the returned error means the read operation failed and the data is
> not relevant.
>
> That makes its initial value irrelevant as well, so skip the data
> conversion instead. If no error happens, a value is assigned to reg_val
> and the data conversion is required.
>
> Reported-by: Dan Carpenter <[email protected]>
> Closes: https://lore.kernel.org/linux-hwmon/[email protected]/T/#t
> Signed-off-by: Javier Carrasco <[email protected]>

Applied.

Thanks,
Guenter