]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: SOF: ipc4-control: Use the correct size for scontrol->ipc_control_data
authorPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Wed, 17 Dec 2025 14:39:40 +0000 (16:39 +0200)
committerMark Brown <broonie@kernel.org>
Wed, 17 Dec 2025 16:35:46 +0000 (16:35 +0000)
The size of the data behind scontrol->ipc_control_data is stored in
scontrol->size, use this when copying data for backup/restore.

Fixes: db38d86d0c54 ("ASoC: sof: Improve sof_ipc4_bytes_ext_put function")
Cc: stable@vger.kernel.org
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Link: https://patch.msgid.link/20251217143945.2667-4-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/ipc4-control.c

index 0a05f66ec7d92dd5f8b342cf52e875743819383a..80111672c1796f7296a0eb35ef0f2ed5d04c592d 100644 (file)
@@ -66,7 +66,7 @@ static int sof_ipc4_set_get_kcontrol_data(struct snd_sof_control *scontrol,
                 * configuration
                 */
                memcpy(scontrol->ipc_control_data, scontrol->old_ipc_control_data,
-                      scontrol->max_size);
+                      scontrol->size);
                kfree(scontrol->old_ipc_control_data);
                scontrol->old_ipc_control_data = NULL;
                /* Send the last known good configuration to firmware */
@@ -567,7 +567,7 @@ static int sof_ipc4_bytes_ext_put(struct snd_sof_control *scontrol,
        if (!scontrol->old_ipc_control_data) {
                /* Create a backup of the current, valid bytes control */
                scontrol->old_ipc_control_data = kmemdup(scontrol->ipc_control_data,
-                                                        scontrol->max_size, GFP_KERNEL);
+                                                        scontrol->size, GFP_KERNEL);
                if (!scontrol->old_ipc_control_data)
                        return -ENOMEM;
        }
@@ -575,7 +575,7 @@ static int sof_ipc4_bytes_ext_put(struct snd_sof_control *scontrol,
        /* Copy the whole binary data which includes the ABI header and the payload */
        if (copy_from_user(data, tlvd->tlv, header.length)) {
                memcpy(scontrol->ipc_control_data, scontrol->old_ipc_control_data,
-                      scontrol->max_size);
+                      scontrol->size);
                kfree(scontrol->old_ipc_control_data);
                scontrol->old_ipc_control_data = NULL;
                return -EFAULT;