From: Jaroslav Kysela Date: Sat, 25 Feb 2023 17:03:37 +0000 (+0100) Subject: pcm: avoid endless loop in snd_pcm_sw_params_default() X-Git-Tag: v1.2.9~13 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=a8afb0449c6a898180982369f543b50393bb90b6;p=alsa-lib.git pcm: avoid endless loop in snd_pcm_sw_params_default() BugLink: https://lore.kernel.org/alsa-devel/167734349294.22.1388671545195719262@mailman-web.alsa-project.org/ Signed-off-by: Jaroslav Kysela --- diff --git a/src/pcm/pcm_params.c b/src/pcm/pcm_params.c index 8140c061..26c70132 100644 --- a/src/pcm/pcm_params.c +++ b/src/pcm/pcm_params.c @@ -2335,6 +2335,9 @@ static int snd_pcm_sw_params_default(snd_pcm_t *pcm, snd_pcm_sw_params_t *params params->silence_threshold = 0; params->silence_size = 0; params->boundary = pcm->buffer_size; + /* this should not happen (bad child?) */ + if (params->boundary == 0) + return -EINVAL; while (params->boundary * 2 <= LONG_MAX - pcm->buffer_size) params->boundary *= 2; return 0; @@ -2431,7 +2434,9 @@ int _snd_pcm_hw_params_internal(snd_pcm_t *pcm, snd_pcm_hw_params_t *params) /* Default sw params */ memset(&sw, 0, sizeof(sw)); - snd_pcm_sw_params_default(pcm, &sw); + err = snd_pcm_sw_params_default(pcm, &sw); + if (err < 0) + return err; err = snd_pcm_sw_params(pcm, &sw); if (err < 0) return err;