On 04/10/2019 11:52:06-0700, Yizhuo wrote: > Inside function snvs_rtc_enable(), variable "lpcr" could be > uninitialized if regmap_read() returns -EINVAL. However,"lpcr" > is used later in the if statement, which is potentially unsafe. > This is not true, regmap_read either lock up the cpu or not fail in this driver. > Similar cases happened in function snvs_rtc_irq_handler() with > variable "lpsr" and function snvs_rtc_read_alarm() with variables > "lptar", "lpsr". The patch for those two are not easy since > -EINVAL is not an acceptable return value for these functions. > > Signed-off-by: Yizhuo <yzhai003@xxxxxxx> > --- > drivers/rtc/rtc-snvs.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/drivers/rtc/rtc-snvs.c b/drivers/rtc/rtc-snvs.c > index 757f4daa7181..dadcc3e193b2 100644 > --- a/drivers/rtc/rtc-snvs.c > +++ b/drivers/rtc/rtc-snvs.c > @@ -124,12 +124,16 @@ static int snvs_rtc_enable(struct snvs_rtc_data *data, bool enable) > { > int timeout = 1000; > u32 lpcr; > + int ret; > > regmap_update_bits(data->regmap, data->offset + SNVS_LPCR, SNVS_LPCR_SRTC_ENV, > enable ? SNVS_LPCR_SRTC_ENV : 0); > > while (--timeout) { > - regmap_read(data->regmap, data->offset + SNVS_LPCR, &lpcr); > + ret = regmap_read(data->regmap, > + data->offset + SNVS_LPCR, &lpcr); > + if (ret) > + return ret; > > if (enable) { > if (lpcr & SNVS_LPCR_SRTC_ENV) > -- > 2.17.1 > -- Alexandre Belloni, Bootlin Embedded Linux and Kernel engineering https://bootlin.com