diff options
author | Jaroslav Kysela <perex@perex.cz> | 2023-02-25 18:03:37 +0100 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2023-02-25 18:03:46 +0100 |
commit | a8afb0449c6a898180982369f543b50393bb90b6 (patch) | |
tree | e02dbde226e2600330b68da991b235c23d15bb8d | |
parent | 44705e3a2050162c4f434d712d22bfe3f7fb5021 (diff) | |
download | alsa-lib-a8afb0449c6a898180982369f543b50393bb90b6.tar.gz |
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>
-rw-r--r-- | src/pcm/pcm_params.c | 7 |
1 files changed, 6 insertions, 1 deletions
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; |