From 080cf9bdc95ef14e131d3f290d5b7c1f1a32831f Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Thu, 26 Mar 2020 18:21:10 +0200 Subject: [PATCH 1/2] ASRC: Fail params() if sink stream rate is zero This patch prevents a firmware crash due to divide by zero. It can happen with DAI types those do not return actual values in pipeline walk with e.g. hda_get_hw_params(). Signed-off-by: Seppo Ingalsuo --- src/audio/asrc/asrc.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/audio/asrc/asrc.c b/src/audio/asrc/asrc.c index 1c3fc55aa2aa..09cc41c912fe 100644 --- a/src/audio/asrc/asrc.c +++ b/src/audio/asrc/asrc.c @@ -412,6 +412,11 @@ static int asrc_params(struct comp_dev *dev, /* set source/sink_frames/rate */ cd->source_rate = sourceb->stream.rate; cd->sink_rate = sinkb->stream.rate; + if (!cd->sink_rate) { + comp_err(dev, "asrc_params(), zero sink rate"); + return -EINVAL; + } + cd->sink_frames = dev->frames; cd->source_frames = ceil_divide(dev->frames * cd->source_rate, cd->sink_rate); From 94ed7618339ac24516fa53849231ad75f492c81f Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Thu, 26 Mar 2020 18:22:42 +0200 Subject: [PATCH 2/2] SRC: Fail params() if sink stream rate is zero This patch prevents a firmware crash due to divide by zero. It can happen with DAI types those do not return actual values in pipeline walk with e.g. hda_get_hw_params(). Signed-off-by: Seppo Ingalsuo --- src/audio/src/src.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/audio/src/src.c b/src/audio/src/src.c index 5642cef36654..060d5320c977 100644 --- a/src/audio/src/src.c +++ b/src/audio/src/src.c @@ -581,6 +581,10 @@ static int src_params(struct comp_dev *dev, /* Set source/sink_rate/frames */ cd->source_rate = sourceb->stream.rate; cd->sink_rate = sinkb->stream.rate; + if (!cd->sink_rate) { + comp_err(dev, "src_params(), zero sink rate"); + return -EINVAL; + } cd->source_frames = dev->frames * cd->source_rate / cd->sink_rate; cd->sink_frames = dev->frames;