ASoC: SOF: control: correct the copy size for bytes kcontrol put
authorKeyon Jie <yang.jie@linux.intel.com>
Fri, 24 May 2019 19:09:22 +0000 (14:09 -0500)
committerMark Brown <broonie@kernel.org>
Tue, 28 May 2019 14:48:27 +0000 (15:48 +0100)
The size for the bytes kcontrol should include the abi header, that is,
data->size + sizeof(*data), it is also aligned with get method after
this change.

Fixes: c3078f53970 ("ASoC: SOF: Add Sound Open Firmware KControl support")
Reviewed-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/control.c

index 11762c4..84e2cbf 100644 (file)
@@ -349,6 +349,7 @@ int snd_sof_bytes_put(struct snd_kcontrol *kcontrol,
        struct snd_sof_dev *sdev = scontrol->sdev;
        struct sof_ipc_ctrl_data *cdata = scontrol->control_data;
        struct sof_abi_hdr *data = cdata->data;
+       size_t size = data->size + sizeof(*data);
        int ret, err;
 
        if (be->max > sizeof(ucontrol->value.bytes.data)) {
@@ -358,10 +359,10 @@ int snd_sof_bytes_put(struct snd_kcontrol *kcontrol,
                return -EINVAL;
        }
 
-       if (data->size > be->max) {
+       if (size > be->max) {
                dev_err_ratelimited(sdev->dev,
-                                   "error: size too big %d bytes max is %d\n",
-                                   data->size, be->max);
+                                   "error: size too big %zu bytes max is %d\n",
+                                   size, be->max);
                return -EINVAL;
        }
 
@@ -375,7 +376,7 @@ int snd_sof_bytes_put(struct snd_kcontrol *kcontrol,
        }
 
        /* copy from kcontrol */
-       memcpy(data, ucontrol->value.bytes.data, data->size);
+       memcpy(data, ucontrol->value.bytes.data, size);
 
        /* notify DSP of byte control updates */
        snd_sof_ipc_set_get_comp_data(sdev->ipc, scontrol,