Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 5661ad94 authored by Keyon Jie's avatar Keyon Jie Committed by Mark Brown
Browse files

ASoC: SOF: control: correct the copy size for bytes kcontrol put



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: c3078f53 ("ASoC: SOF: Add Sound Open Firmware KControl support")
Reviewed-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarKeyon Jie <yang.jie@linux.intel.com>
Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent fab4edf4
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -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,