On Sun, 6 Oct 2024 15:25:33 +0100 Jonathan Cameron <jic23@xxxxxxxxxx> wrote: > On Sat, 5 Oct 2024 22:37:22 +0530 > Mohammed Anees <pvmohammedanees2003@xxxxxxxxx> wrote: > > > In the current implementation of the ltc2664_channel_config function, > > a variable named span is declared and initialized to 0, intended to > > capture the return value of the ltc2664_set_span function. However, > > the output of ltc2664_set_span is directly assigned to chan->span, > > leaving span unchanged. As a result, when the function later checks > > if (span < 0), this condition will never trigger an error since > > span remains 0, this flaw leads to ineffective error handling. The > > current patch resolves this issue by using the ret variable for > > getting the return value, later assigning if successful and also > > effectively removing span variable. > > > > Signed-off-by: Mohammed Anees <pvmohammedanees2003@xxxxxxxxx> > > Fixes: 4cc2fc445d2e4e63ed6bd5d310752d88d365f8e4 Hmm. I see you had a v3. For some reason that hasn't reached my inbox. Also note the fixes tag was wrong and you've fixed that. I've picked up v3 and applied it to the fixes-togreg branch of iio.git and marked it for stable inclusion. Thanks, J > > --- > > v2: > > - Using the ret variable to store the result from ltc2664_set_span > > --- > > drivers/iio/dac/ltc2664.c | 18 +++++++++++------- > > 1 file changed, 11 insertions(+), 7 deletions(-) > > > > diff --git a/drivers/iio/dac/ltc2664.c b/drivers/iio/dac/ltc2664.c > > index 5be5345ac5c8..7dafcba7ece7 100644 > > --- a/drivers/iio/dac/ltc2664.c > > +++ b/drivers/iio/dac/ltc2664.c > > @@ -516,7 +516,7 @@ static int ltc2664_channel_config(struct ltc2664_state *st) > > const struct ltc2664_chip_info *chip_info = st->chip_info; > > struct device *dev = &st->spi->dev; > > u32 reg, tmp[2], mspan; > > - int ret, span = 0; > > + int ret; > > > > mspan = LTC2664_MSPAN_SOFTSPAN; > > ret = device_property_read_u32(dev, "adi,manual-span-operation-config", > > @@ -579,20 +579,24 @@ static int ltc2664_channel_config(struct ltc2664_state *st) > > ret = fwnode_property_read_u32_array(child, "output-range-microvolt", > > tmp, ARRAY_SIZE(tmp)); > > if (!ret && mspan == LTC2664_MSPAN_SOFTSPAN) { > > - chan->span = ltc2664_set_span(st, tmp[0] / 1000, > > + ret = ltc2664_set_span(st, tmp[0] / 1000, > > tmp[1] / 1000, reg); > > - if (span < 0) > > - return dev_err_probe(dev, span, > > + if (ret < 0) > > + return dev_err_probe(dev, ret, > > "Failed to set span\n"); > > + else > else is unnecessary here as we have the standard check and error and return > if set pattern. > > > > + chan->span = ret; > > } > > > > ret = fwnode_property_read_u32_array(child, "output-range-microamp", > > tmp, ARRAY_SIZE(tmp)); > > if (!ret) { > > - chan->span = ltc2664_set_span(st, 0, tmp[1] / 1000, reg); > > - if (span < 0) > > - return dev_err_probe(dev, span, > > + ret = ltc2664_set_span(st, 0, tmp[1] / 1000, reg); > > + if (ret < 0) > > + return dev_err_probe(dev, ret, > > "Failed to set span\n"); > > + else > and here. > > + chan->span = ret; > > } > > } > > > >