summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaroslav Kysela <perex@perex.cz>2023-02-25 18:03:37 +0100
committerJaroslav Kysela <perex@perex.cz>2023-02-25 18:03:46 +0100
commita8afb0449c6a898180982369f543b50393bb90b6 (patch)
treee02dbde226e2600330b68da991b235c23d15bb8d
parent44705e3a2050162c4f434d712d22bfe3f7fb5021 (diff)
downloadalsa-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.c7
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;