diff mbox series

[1/3] ASoC: wm_adsp: Correct control read size when parsing compressed buffer

Message ID 20220210172053.22782-1-ckeepax@opensource.cirrus.com
State Accepted
Commit a887f9c7a4d37a8e874ba8415a42a92a1b5139fc
Headers show
Series [1/3] ASoC: wm_adsp: Correct control read size when parsing compressed buffer | expand

Commit Message

Charles Keepax Feb. 10, 2022, 5:20 p.m. UTC
When parsing the compressed stream the whole buffer descriptor is
now read in a single cs_dsp_coeff_read_ctrl; on older firmwares
this descriptor is just 4 bytes but on more modern firmwares it is
24 bytes. The current code reads the full 24 bytes regardless, this
was working but reading junk for the last 20 bytes. However commit
f444da38ac92 ("firmware: cs_dsp: Add offset to cs_dsp read/write")
added a size check into cs_dsp_coeff_read_ctrl, causing the older
firmwares to now return an error.

Update the code to only read the amount of data appropriate for
the firmware loaded.

Fixes: 04ae08596737 ("ASoC: wm_adsp: Switch to using wm_coeff_read_ctrl for compressed buffers")
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
---
 sound/soc/codecs/wm_adsp.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Mark Brown Feb. 10, 2022, 8:19 p.m. UTC | #1
On Thu, 10 Feb 2022 17:20:51 +0000, Charles Keepax wrote:
> When parsing the compressed stream the whole buffer descriptor is
> now read in a single cs_dsp_coeff_read_ctrl; on older firmwares
> this descriptor is just 4 bytes but on more modern firmwares it is
> 24 bytes. The current code reads the full 24 bytes regardless, this
> was working but reading junk for the last 20 bytes. However commit
> f444da38ac92 ("firmware: cs_dsp: Add offset to cs_dsp read/write")
> added a size check into cs_dsp_coeff_read_ctrl, causing the older
> firmwares to now return an error.
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-linus

Thanks!

[1/3] ASoC: wm_adsp: Correct control read size when parsing compressed buffer
      commit: a887f9c7a4d37a8e874ba8415a42a92a1b5139fc

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark
diff mbox series

Patch

diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
index f3672e3d1703e..0582585236a28 100644
--- a/sound/soc/codecs/wm_adsp.c
+++ b/sound/soc/codecs/wm_adsp.c
@@ -1441,7 +1441,8 @@  static int wm_adsp_buffer_parse_coeff(struct cs_dsp_coeff_ctl *cs_ctl)
 	int ret, i;
 
 	for (i = 0; i < 5; ++i) {
-		ret = cs_dsp_coeff_read_ctrl(cs_ctl, 0, &coeff_v1, sizeof(coeff_v1));
+		ret = cs_dsp_coeff_read_ctrl(cs_ctl, 0, &coeff_v1,
+					     min(cs_ctl->len, sizeof(coeff_v1)));
 		if (ret < 0)
 			return ret;