From b7070e039d08bfafe61546b15e70f0f8f04810d1 Mon Sep 17 00:00:00 2001 From: Adrian Bonislawski Date: Sat, 22 Aug 2026 20:20:45 +0200 Subject: [PATCH 1/4] iadk: system_agent: reject unparsable module settings Reject malformed initialization data before deriving the extended module configuration. Signed-off-by: Adrian Bonislawski --- src/audio/module_adapter/iadk/system_agent.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/audio/module_adapter/iadk/system_agent.cpp b/src/audio/module_adapter/iadk/system_agent.cpp index caed8cf65860..ebf3567876cb 100644 --- a/src/audio/module_adapter/iadk/system_agent.cpp +++ b/src/audio/module_adapter/iadk/system_agent.cpp @@ -91,6 +91,8 @@ int SystemAgent::CheckIn(ProcessingModuleFactoryInterface& module_factory, const dsp_fw::DwordArray& cfg_ipc_msg = *reinterpret_cast(obfuscated_mod_cfg); ModuleInitialSettingsConcrete settings(cfg_ipc_msg); + if (!settings.IsParsable()) + return -EINVAL; ProcessingModulePrerequisites prerequisites; module_factory.GetPrerequisites(prerequisites); From 3075cd709e9fddbb145918701ca0ed1f9028b818 Mon Sep 17 00:00:00 2001 From: Adrian Bonislawski Date: Sat, 22 Aug 2026 20:21:25 +0200 Subject: [PATCH 2/4] iadk: system_agent: handle module factory creation errors Stop module initialization when the external factory reports a creation error. Signed-off-by: Adrian Bonislawski --- src/audio/module_adapter/iadk/system_agent.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/audio/module_adapter/iadk/system_agent.cpp b/src/audio/module_adapter/iadk/system_agent.cpp index ebf3567876cb..a805ddd24f8d 100644 --- a/src/audio/module_adapter/iadk/system_agent.cpp +++ b/src/audio/module_adapter/iadk/system_agent.cpp @@ -87,6 +87,7 @@ int SystemAgent::CheckIn(ProcessingModuleFactoryInterface& module_factory, void *obfuscated_parent_ppl, void **obfuscated_modinst_p) { + ErrorCode::Type error; IoPinsInfo pins_info; const dsp_fw::DwordArray& cfg_ipc_msg = *reinterpret_cast(obfuscated_mod_cfg); @@ -112,7 +113,11 @@ int SystemAgent::CheckIn(ProcessingModuleFactoryInterface& module_factory, settings.DeduceBaseModuleCfgExt(prerequisites.input_pins_count, prerequisites.output_pins_count); - module_factory.Create(*this, module_placeholder, ModuleInitialSettings(settings), pins_info); + error = module_factory.Create(*this, module_placeholder, ModuleInitialSettings(settings), + pins_info); + if (error != ErrorCode::NO_ERROR) + return -EINVAL; + IadkModuleAdapter& module_adapter = *reinterpret_cast(module_handle_); *obfuscated_modinst_p = &module_adapter; reinterpret_cast(module_placeholder)->Init(); From 4f9340a770f01955e94b6855cbf882d792597aad Mon Sep 17 00:00:00 2001 From: Adrian Bonislawski Date: Sat, 22 Aug 2026 20:22:03 +0200 Subject: [PATCH 3/4] iadk: ModuleInitialSettingsConcrete: use output pin size Use the matching output pin type when validating compound configuration sizes. Signed-off-by: Adrian Bonislawski --- .../module_adapter/iadk/module_initial_settings_concrete.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/audio/module_adapter/iadk/module_initial_settings_concrete.cpp b/src/audio/module_adapter/iadk/module_initial_settings_concrete.cpp index 82e1e02f5e96..83ac99a07835 100644 --- a/src/audio/module_adapter/iadk/module_initial_settings_concrete.cpp +++ b/src/audio/module_adapter/iadk/module_initial_settings_concrete.cpp @@ -54,11 +54,11 @@ ModuleInitialSettingsConcrete::ModuleInitialSettingsConcrete(DwordArray const &c const size_t computed_msg_size = sizeof(CompoundCfg) - /* CompoundCfg already contains one InputPinFormat and - * one InputPinFormat + * one OutputPinFormat */ (sizeof(InputPinFormat) + sizeof(OutputPinFormat)) + unvalidated_compound_cfg->cfg_ext.nb_input_pins*sizeof(InputPinFormat) + - unvalidated_compound_cfg->cfg_ext.nb_output_pins*sizeof(InputPinFormat); + unvalidated_compound_cfg->cfg_ext.nb_output_pins*sizeof(OutputPinFormat); /* check size consistency */ if (ipc_msg_size != computed_msg_size) { From fd009d4d277e8517711bcbc15792262f1356fe90 Mon Sep 17 00:00:00 2001 From: Adrian Bonislawski Date: Wed, 26 Aug 2026 10:31:44 +0200 Subject: [PATCH 4/4] iadk: system_agent: return -EINVAL for invalid pin counts Return -EINVAL instead when module prerequisites specify an unsupported number of input or output pins. Signed-off-by: Adrian Bonislawski --- src/audio/module_adapter/iadk/system_agent.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/audio/module_adapter/iadk/system_agent.cpp b/src/audio/module_adapter/iadk/system_agent.cpp index a805ddd24f8d..7f5bc63a9559 100644 --- a/src/audio/module_adapter/iadk/system_agent.cpp +++ b/src/audio/module_adapter/iadk/system_agent.cpp @@ -107,7 +107,7 @@ int SystemAgent::CheckIn(ProcessingModuleFactoryInterface& module_factory, (prerequisites.input_pins_count > INPUT_PIN_COUNT) || (prerequisites.output_pins_count < 1) || (prerequisites.output_pins_count > OUTPUT_PIN_COUNT)) - return -1; + return -EINVAL; /* Deduce BaseModuleCfgExt if it was not part of the INIT_INSTANCE IPC message */ settings.DeduceBaseModuleCfgExt(prerequisites.input_pins_count,