[PATCH v3] iio: adc: mt6359: fix unchecked return value in mt6358_read_imp

Salah Triki posted 1 patch 1 month, 2 weeks ago
There is a newer version of this series
drivers/iio/adc/mt6359-auxadc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH v3] iio: adc: mt6359: fix unchecked return value in mt6358_read_imp
Posted by Salah Triki 1 month, 2 weeks ago
In mt6358_read_imp(), the variable val_v is passed to regmap_read()
but the return value is not checked. If the read fails, val_v remains
uninitialized and its random stack content is subsequently reported
as a measurement result.

Initialize val_v to zero to ensure a predictable value is reported
in case of bus failure and to prevent potential stack data leakage.
This also satisfies static analyzers that might otherwise flag the
variable as used uninitialized.

Fixes: 3587914bf61 ("iio: adc: Add support for MediaTek MT6357/8/9 Auxiliary ADC")
Signed-off-by: Salah Triki <salah.triki@gmail.com>
---
Changes in v3:
- Initialize val_v to zero at declaration instead of checking regmap_read()
  return value, as suggested by Jonathan Cameron and Andy Shevchenko.
- Update commit message to reflect this new approach

Changes in v2:
- Added Fixes tag.
- Re-examined the entire driver for unchecked regmap operations.
  While several regmap_write() and regmap_set_bits() calls also ignore
  return values, I focused on this specific regmap_read() in
  mt6358_read_imp() because it leads to an uninitialized variable usage
  (val_v). This makes this fix critical for reporting correct data
  to userspace

 drivers/iio/adc/mt6359-auxadc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/iio/adc/mt6359-auxadc.c b/drivers/iio/adc/mt6359-auxadc.c
index 6b9ed9b1fde2..0e52effa55db 100644
--- a/drivers/iio/adc/mt6359-auxadc.c
+++ b/drivers/iio/adc/mt6359-auxadc.c
@@ -489,7 +489,7 @@ static int mt6358_read_imp(struct mt6359_auxadc *adc_dev,
 	const struct mtk_pmic_auxadc_info *cinfo = adc_dev->chip_info;
 	struct regmap *regmap = adc_dev->regmap;
 	u16 reg_adc0 = cinfo->regs[PMIC_AUXADC_ADC0];
-	u32 val_v;
+	u32 val_v = 0;
 	int ret;
 
 	ret = mt6358_start_imp_conv(adc_dev, chan);
-- 
2.43.0
Re: [PATCH v3] iio: adc: mt6359: fix unchecked return value in mt6358_read_imp
Posted by Andy Shevchenko 1 month, 2 weeks ago
On Mon, Apr 27, 2026 at 08:08:49PM +0100, Salah Triki wrote:
> In mt6358_read_imp(), the variable val_v is passed to regmap_read()
> but the return value is not checked. If the read fails, val_v remains
> uninitialized and its random stack content is subsequently reported
> as a measurement result.
> 
> Initialize val_v to zero to ensure a predictable value is reported
> in case of bus failure and to prevent potential stack data leakage.
> This also satisfies static analyzers that might otherwise flag the
> variable as used uninitialized.

...

>  	const struct mtk_pmic_auxadc_info *cinfo = adc_dev->chip_info;
>  	struct regmap *regmap = adc_dev->regmap;
>  	u16 reg_adc0 = cinfo->regs[PMIC_AUXADC_ADC0];
> -	u32 val_v;
> +	u32 val_v = 0;

This is hard to maintain. Better to assign it just immediately before the first use.

>  	int ret;

Otherwise, LGTM.

-- 
With Best Regards,
Andy Shevchenko