/* Every config-BLOB contains gateway attributes. */
        if (data_size)
                cfg_size -= sizeof(cfg->gtw_cfg.config.attrs);
+       if (cfg_size > AVS_MAILBOX_SIZE)
+               return -EINVAL;
 
-       cfg = kzalloc(cfg_size, GFP_KERNEL);
-       if (!cfg)
-               return -ENOMEM;
-
+       cfg = adev->modcfg_buf;
+       memset(cfg, 0, cfg_size);
        cfg->base.cpc = t->cfg_base->cpc;
        cfg->base.ibs = t->cfg_base->ibs;
        cfg->base.obs = t->cfg_base->obs;
        ret = avs_dsp_init_module(adev, mod->module_id, mod->owner->instance_id,
                                  t->core_id, t->domain, cfg, cfg_size,
                                  &mod->instance_id);
-       kfree(cfg);
        return ret;
 }
 
        struct avs_control_data *ctl_data;
        struct avs_peakvol_cfg *cfg;
        int volume = S32_MAX;
-       size_t size;
+       size_t cfg_size;
        int ret;
 
        ctl_data = avs_get_module_control(mod);
                volume = ctl_data->volume;
 
        /* As 2+ channels controls are unsupported, have a single block for all channels. */
-       size = struct_size(cfg, vols, 1);
-       cfg = kzalloc(size, GFP_KERNEL);
-       if (!cfg)
-               return -ENOMEM;
+       cfg_size = struct_size(cfg, vols, 1);
+       if (cfg_size > AVS_MAILBOX_SIZE)
+               return -EINVAL;
 
+       cfg = adev->modcfg_buf;
+       memset(cfg, 0, cfg_size);
        cfg->base.cpc = t->cfg_base->cpc;
        cfg->base.ibs = t->cfg_base->ibs;
        cfg->base.obs = t->cfg_base->obs;
        cfg->vols[0].curve_duration = 0;
 
        ret = avs_dsp_init_module(adev, mod->module_id, mod->owner->instance_id, t->core_id,
-                                 t->domain, cfg, size, &mod->instance_id);
+                                 t->domain, cfg, cfg_size, &mod->instance_id);
 
-       kfree(cfg);
        return ret;
 }
 
        num_pins = tcfg->generic.num_input_pins + tcfg->generic.num_output_pins;
        cfg_size = struct_size(cfg, pin_fmts, num_pins);
 
-       cfg = kzalloc(cfg_size, GFP_KERNEL);
-       if (!cfg)
-               return -ENOMEM;
+       if (cfg_size > AVS_MAILBOX_SIZE)
+               return -EINVAL;
 
+       cfg = adev->modcfg_buf;
+       memset(cfg, 0, cfg_size);
        cfg->base.cpc = t->cfg_base->cpc;
        cfg->base.ibs = t->cfg_base->ibs;
        cfg->base.obs = t->cfg_base->obs;
        ret = avs_dsp_init_module(adev, mod->module_id, mod->owner->instance_id,
                                  t->core_id, t->domain, cfg, cfg_size,
                                  &mod->instance_id);
-       kfree(cfg);
        return ret;
 }