Message ID | 20181224190032.23167-1-pakki001@umn.edu (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
Series | clk: Fix a missing check on regmap_bulk_read | expand |
Quoting Aditya Pakki (2018-12-24 11:00:32) > Currently, vc5_pll_recalc_rate() may produce incorrect output when > regmap_bulk_read() fails. The fix checks the return value of the > latter function and returns 0 in case of failure. > > Signed-off-by: Aditya Pakki <pakki001@umn.edu> > --- > drivers/clk/clk-versaclock5.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c > index decffb3826ec..cd76a893c594 100644 > --- a/drivers/clk/clk-versaclock5.c > +++ b/drivers/clk/clk-versaclock5.c > @@ -413,7 +413,8 @@ static unsigned long vc5_pll_recalc_rate(struct clk_hw *hw, > u32 div_int, div_frc; > u8 fb[5]; > > - regmap_bulk_read(vc5->regmap, VC5_FEEDBACK_INT_DIV, fb, 5); > + if (regmap_bulk_read(vc5->regmap, VC5_FEEDBACK_INT_DIV, fb, 5)) > + return 0; There are a bunch of other regmap_*() APIs in here that "could fail". Why has this one been chosen but the other ones not?
On 12/24/18 8:00 PM, Aditya Pakki wrote: > Currently, vc5_pll_recalc_rate() may produce incorrect output when > regmap_bulk_read() fails. The fix checks the return value of the > latter function and returns 0 in case of failure. > > Signed-off-by: Aditya Pakki <pakki001@umn.edu> > --- > drivers/clk/clk-versaclock5.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c > index decffb3826ec..cd76a893c594 100644 > --- a/drivers/clk/clk-versaclock5.c > +++ b/drivers/clk/clk-versaclock5.c > @@ -413,7 +413,8 @@ static unsigned long vc5_pll_recalc_rate(struct clk_hw *hw, > u32 div_int, div_frc; > u8 fb[5]; > > - regmap_bulk_read(vc5->regmap, VC5_FEEDBACK_INT_DIV, fb, 5); > + if (regmap_bulk_read(vc5->regmap, VC5_FEEDBACK_INT_DIV, fb, 5)) > + return 0; Shouldn't this return ret on failure ? > div_int = (fb[0] << 4) | (fb[1] >> 4); > div_frc = (fb[2] << 16) | (fb[3] << 8) | fb[4]; >
diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c index decffb3826ec..cd76a893c594 100644 --- a/drivers/clk/clk-versaclock5.c +++ b/drivers/clk/clk-versaclock5.c @@ -413,7 +413,8 @@ static unsigned long vc5_pll_recalc_rate(struct clk_hw *hw, u32 div_int, div_frc; u8 fb[5]; - regmap_bulk_read(vc5->regmap, VC5_FEEDBACK_INT_DIV, fb, 5); + if (regmap_bulk_read(vc5->regmap, VC5_FEEDBACK_INT_DIV, fb, 5)) + return 0; div_int = (fb[0] << 4) | (fb[1] >> 4); div_frc = (fb[2] << 16) | (fb[3] << 8) | fb[4];
Currently, vc5_pll_recalc_rate() may produce incorrect output when regmap_bulk_read() fails. The fix checks the return value of the latter function and returns 0 in case of failure. Signed-off-by: Aditya Pakki <pakki001@umn.edu> --- drivers/clk/clk-versaclock5.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)