Commit 3bc085a1 authored by Xi Wang's avatar Xi Wang Committed by Takashi Iwai

ALSA: hda/ca0132 - Avoid division by zero in dspxfr_one_seg()

Move the zero check `hda_frame_size_words == 0' before the modulus
`buffer_size_words % hda_frame_size_words'.

Also remove the redundant null check `buffer_addx == NULL'.
Signed-off-by: default avatarXi Wang <xi.wang@gmail.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 4c7a548a
...@@ -2298,6 +2298,11 @@ static int dspxfr_one_seg(struct hda_codec *codec, ...@@ -2298,6 +2298,11 @@ static int dspxfr_one_seg(struct hda_codec *codec,
hda_frame_size_words = ((sample_rate_div == 0) ? 0 : hda_frame_size_words = ((sample_rate_div == 0) ? 0 :
(num_chans * sample_rate_mul / sample_rate_div)); (num_chans * sample_rate_mul / sample_rate_div));
if (hda_frame_size_words == 0) {
snd_printdd(KERN_ERR "frmsz zero\n");
return -EINVAL;
}
buffer_size_words = min(buffer_size_words, buffer_size_words = min(buffer_size_words,
(unsigned int)(UC_RANGE(chip_addx, 1) ? (unsigned int)(UC_RANGE(chip_addx, 1) ?
65536 : 32768)); 65536 : 32768));
...@@ -2308,8 +2313,7 @@ static int dspxfr_one_seg(struct hda_codec *codec, ...@@ -2308,8 +2313,7 @@ static int dspxfr_one_seg(struct hda_codec *codec,
chip_addx, hda_frame_size_words, num_chans, chip_addx, hda_frame_size_words, num_chans,
sample_rate_mul, sample_rate_div, buffer_size_words); sample_rate_mul, sample_rate_div, buffer_size_words);
if ((buffer_addx == NULL) || (hda_frame_size_words == 0) || if (buffer_size_words < hda_frame_size_words) {
(buffer_size_words < hda_frame_size_words)) {
snd_printdd(KERN_ERR "dspxfr_one_seg:failed\n"); snd_printdd(KERN_ERR "dspxfr_one_seg:failed\n");
return -EINVAL; return -EINVAL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment