2019-11-19 07:38:56

by 冯锐

[permalink] [raw]
Subject: [PATCH] misc: rtsx: Fix impossible condition

From: Rui Feng <[email protected]>

A u8 can only go up to 255, condition n > 396 is
impossible, so change u8 to u16.

Signed-off-by: Rui Feng <[email protected]>
---
drivers/misc/cardreader/rts5261.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/misc/cardreader/rts5261.c b/drivers/misc/cardreader/rts5261.c
index 32dcec2..8dba0bf 100644
--- a/drivers/misc/cardreader/rts5261.c
+++ b/drivers/misc/cardreader/rts5261.c
@@ -628,7 +628,8 @@ int rts5261_pci_switch_clock(struct rtsx_pcr *pcr, unsigned int card_clock,
u8 ssc_depth, bool initial_mode, bool double_clk, bool vpclk)
{
int err, clk;
- u8 n, clk_divider, mcu_cnt, div;
+ u16 n;
+ u8 clk_divider, mcu_cnt, div;
static const u8 depth[] = {
[RTSX_SSC_DEPTH_4M] = RTS5261_SSC_DEPTH_4M,
[RTSX_SSC_DEPTH_2M] = RTS5261_SSC_DEPTH_2M,
@@ -661,9 +662,9 @@ int rts5261_pci_switch_clock(struct rtsx_pcr *pcr, unsigned int card_clock,
return 0;

if (pcr->ops->conv_clk_and_div_n)
- n = (u8)pcr->ops->conv_clk_and_div_n(clk, CLK_TO_DIV_N);
+ n = (u16)pcr->ops->conv_clk_and_div_n(clk, CLK_TO_DIV_N);
else
- n = (u8)(clk - 4);
+ n = (u16)(clk - 4);
if ((clk <= 4) || (n > 396))
return -EINVAL;

@@ -676,7 +677,7 @@ int rts5261_pci_switch_clock(struct rtsx_pcr *pcr, unsigned int card_clock,
if (pcr->ops->conv_clk_and_div_n) {
int dbl_clk = pcr->ops->conv_clk_and_div_n(n,
DIV_N_TO_CLK) * 2;
- n = (u8)pcr->ops->conv_clk_and_div_n(dbl_clk,
+ n = (u16)pcr->ops->conv_clk_and_div_n(dbl_clk,
CLK_TO_DIV_N);
} else {
n = (n + 4) * 2 - 4;
@@ -721,7 +722,7 @@ int rts5261_pci_switch_clock(struct rtsx_pcr *pcr, unsigned int card_clock,
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SSC_CTL1, SSC_RSTB, 0);
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SSC_CTL2,
SSC_DEPTH_MASK, ssc_depth);
- rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SSC_DIV_N_0, 0xFF, n);
+ rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SSC_DIV_N_0, 0xFF, (u8)n);
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SSC_CTL1, SSC_RSTB, SSC_RSTB);
if (vpclk) {
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_VPCLK0_CTL,
--
1.9.1



2019-11-19 08:03:29

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH] misc: rtsx: Fix impossible condition

On Tue, Nov 19, 2019 at 03:33:45PM +0800, [email protected] wrote:
> From: Rui Feng <[email protected]>
>
> A u8 can only go up to 255, condition n > 396 is
> impossible, so change u8 to u16.
>
> Signed-off-by: Rui Feng <[email protected]>
> ---
> drivers/misc/cardreader/rts5261.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/misc/cardreader/rts5261.c b/drivers/misc/cardreader/rts5261.c
> index 32dcec2..8dba0bf 100644
> --- a/drivers/misc/cardreader/rts5261.c
> +++ b/drivers/misc/cardreader/rts5261.c
> @@ -628,7 +628,8 @@ int rts5261_pci_switch_clock(struct rtsx_pcr *pcr, unsigned int card_clock,
> u8 ssc_depth, bool initial_mode, bool double_clk, bool vpclk)
> {
> int err, clk;
> - u8 n, clk_divider, mcu_cnt, div;
> + u16 n;
> + u8 clk_divider, mcu_cnt, div;
> static const u8 depth[] = {
> [RTSX_SSC_DEPTH_4M] = RTS5261_SSC_DEPTH_4M,
> [RTSX_SSC_DEPTH_2M] = RTS5261_SSC_DEPTH_2M,
> @@ -661,9 +662,9 @@ int rts5261_pci_switch_clock(struct rtsx_pcr *pcr, unsigned int card_clock,
> return 0;
>
> if (pcr->ops->conv_clk_and_div_n)
> - n = (u8)pcr->ops->conv_clk_and_div_n(clk, CLK_TO_DIV_N);
> + n = (u16)pcr->ops->conv_clk_and_div_n(clk, CLK_TO_DIV_N);
> else
> - n = (u8)(clk - 4);
> + n = (u16)(clk - 4);

Why is the cast now needed? Same for everywhere else.

thanks,

greg k-h