diff --git a/src/audio/copier/copier_gain.c b/src/audio/copier/copier_gain.c index fc9f6664add8..842f92997108 100644 --- a/src/audio/copier/copier_gain.c +++ b/src/audio/copier/copier_gain.c @@ -150,7 +150,7 @@ int copier_gain_dma_control(union ipc4_connector_node_id node, const char *confi } struct ipc4_copier_module_cfg *copier_cfg = cd->dd[0]->dai_spec_config; - const int channels = copier_cfg->base.audio_fmt.channels_count; + const uint32_t channels = copier_cfg->base.audio_fmt.channels_count; ret = copier_set_gain(dev, cd->dd[0]->gain_data, gain_data, channels); if (ret) @@ -162,7 +162,7 @@ int copier_gain_dma_control(union ipc4_connector_node_id node, const char *confi } int copier_set_gain(struct comp_dev *dev, struct copier_gain_params *gain_params, - struct gain_dma_control_data *gain_data, int channels) + struct gain_dma_control_data *gain_data, uint32_t channels) { uint16_t static_gain[MAX_GAIN_COEFFS_CNT]; int ret; @@ -172,12 +172,17 @@ int copier_set_gain(struct comp_dev *dev, struct copier_gain_params *gain_params return -EINVAL; } + if (channels == 0 || channels > MAX_GAIN_COEFFS_CNT) { + comp_err(dev, "invalid channels count %u", channels); + return -EINVAL; + } + /* Set gain coefficients */ comp_info(dev, "Update gain coefficients from DMA_CONTROL ipc"); size_t gain_coef_size = channels * sizeof(uint16_t); - ret = memcpy_s(static_gain, gain_coef_size, gain_data->gain_coeffs, + ret = memcpy_s(static_gain, sizeof(static_gain), gain_data->gain_coeffs, gain_coef_size); if (ret) { comp_err(dev, "memcpy_s failed with error %d", ret); diff --git a/src/audio/copier/copier_gain.h b/src/audio/copier/copier_gain.h index ec55ff999206..bd7cc5719f5b 100644 --- a/src/audio/copier/copier_gain.h +++ b/src/audio/copier/copier_gain.h @@ -8,6 +8,7 @@ #ifndef __SOF_COPIER_GAIN_H__ #define __SOF_COPIER_GAIN_H__ +#include #include #include #include @@ -219,7 +220,7 @@ enum copier_gain_state copier_gain_eval_state(struct copier_gain_params *gain_pa * @return 0 on success, otherwise a negative error code. */ int copier_set_gain(struct comp_dev *dev, struct copier_gain_params *gain_params, - struct gain_dma_control_data *gain_data, int channels); + struct gain_dma_control_data *gain_data, uint32_t channels); /** * Checks for unity gain mode.