From 8effa4ff3d7cabc12c94c2228727da96a1b455fc Mon Sep 17 00:00:00 2001 From: Ranjani Sridharan Date: Thu, 13 Jan 2022 19:03:09 -0800 Subject: [PATCH] codec_adapter: fix panic during reset If module_prepare() fails, the pipeline will be reset resulting in module_reset() getting invoked. Just return if the state is < MODULE_IDLE which indicates that the module was never prepared. Also, in this case, local_buff is never allocated. So, check if it is NULL before zeroing it out to avoid DSP panic. Signed-off-by: Ranjani Sridharan --- src/audio/codec_adapter/codec/generic.c | 4 ++++ src/audio/codec_adapter/codec_adapter.c | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/audio/codec_adapter/codec/generic.c b/src/audio/codec_adapter/codec/generic.c index 91a04f2fc..f83c130a2 100644 --- a/src/audio/codec_adapter/codec/generic.c +++ b/src/audio/codec_adapter/codec/generic.c @@ -307,6 +307,10 @@ int module_reset(struct comp_dev *dev) struct processing_module *mod = comp_get_drvdata(dev); struct module_data *md = &mod->priv; + /* if the module was never prepared, no need to reset */ + if (md->state < MODULE_IDLE) + return 0; + ret = md->ops->reset(dev); if (ret) { comp_err(dev, "module_reset() error %d: module specific reset() failed for comp %d", diff --git a/src/audio/codec_adapter/codec_adapter.c b/src/audio/codec_adapter/codec_adapter.c index 08e56adca..4aa930530 100644 --- a/src/audio/codec_adapter/codec_adapter.c +++ b/src/audio/codec_adapter/codec_adapter.c @@ -584,7 +584,10 @@ int codec_adapter_reset(struct comp_dev *dev) comp_err(dev, "codec_adapter_reset(): error %d, codec reset has failed", ret); } - buffer_zero(mod->local_buff); + + /* if module is not prepared, local_buffer won't be allocated */ + if (mod->local_buff) + buffer_zero(mod->local_buff); comp_dbg(dev, "codec_adapter_reset(): done");