diff mbox series

ALSA: rockchip: fix a possible divide-by-zero bug in rockchip_i2s_hw_params()

Message ID 20200830095106.4412-1-t-li20@mails.tsinghua.edu.cn (mailing list archive)
State New, archived
Headers show
Series ALSA: rockchip: fix a possible divide-by-zero bug in rockchip_i2s_hw_params() | expand

Commit Message

Tuo Li Aug. 30, 2020, 9:51 a.m. UTC
The variable bclk_rate is checked in:
  if (bclk_rate && mclk_rate % bclk_rate)

This indicates that bclk_rate can be zero.
If so, a divide-by-zero bug will occur:
  div_bclk = mclk_rate / bclk_rate;

To fix this possible bug, the function returns -EINVAL when bclk_rate is
zero.

Signed-off-by: Tuo Li <t-li20@mails.tsinghua.edu.cn>
---
 sound/soc/rockchip/rockchip_i2s.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Mark Brown Sept. 25, 2020, 4:51 p.m. UTC | #1
On Sun, Aug 30, 2020 at 05:51:06PM +0800, Tuo Li wrote:
> The variable bclk_rate is checked in:
>   if (bclk_rate && mclk_rate % bclk_rate)

Please submit patches using subject lines reflecting the style for the
subsystem, this makes it easier for people to identify relevant patches.
Look at what existing commits in the area you're changing are doing and
make sure your subject lines visually resemble what they're doing.
There's no need to resubmit to fix this alone.
Mark Brown Sept. 25, 2020, 7:28 p.m. UTC | #2
On Sun, Aug 30, 2020 at 05:51:06PM +0800, Tuo Li wrote:
> The variable bclk_rate is checked in:
>   if (bclk_rate && mclk_rate % bclk_rate)

This doesn't apply against current code, please check and resend:

HEAD is now at bbd59df075ab Merge series "ASoC: Intel: sdw machine driver updates for 5.10" from Kai Vehmanen <kai.vehmanen@linux.intel.com>:
Applying: ASoC: rockchip: fix a possible divide-by-zero bug in rockchip_i2s_hw_params()
Using index info to reconstruct a base tree...
M	sound/soc/rockchip/rockchip_i2s.c
Falling back to patching base and 3-way merge...
Auto-merging sound/soc/rockchip/rockchip_i2s.c
CONFLICT (content): Merge conflict in sou
diff mbox series

Patch

diff --git a/sound/soc/rockchip/rockchip_i2s.c b/sound/soc/rockchip/rockchip_i2s.c
index d1438753edb4..dd0836c32639 100644
--- a/sound/soc/rockchip/rockchip_i2s.c
+++ b/sound/soc/rockchip/rockchip_i2s.c
@@ -279,7 +279,9 @@  static int rockchip_i2s_hw_params(struct snd_pcm_substream *substream,
 	if (i2s->is_master_mode) {
 		mclk_rate = clk_get_rate(i2s->mclk);
 		bclk_rate = 2 * 32 * params_rate(params);
-		if (bclk_rate && mclk_rate % bclk_rate)
+		if (bclk_rate == 0)
+			return -EINVAL;
+		if (mclk_rate % bclk_rate)
 			return -EINVAL;
 
 		div_bclk = mclk_rate / bclk_rate;