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 <perex@perex.cz>
This commit is contained in:
Jaroslav Kysela 2023-02-25 18:03:37 +01:00
parent 44705e3a20
commit a8afb0449c

View file

@ -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;