diff mbox series

firmware: cs_dsp: Don't allow writes to read-only controls

Message ID 20240702110809.16836-1-rf@opensource.cirrus.com (mailing list archive)
State Accepted
Commit 62412a9357b16a4e39dc582deb2e2a682b92524c
Headers show
Series firmware: cs_dsp: Don't allow writes to read-only controls | expand

Commit Message

Richard Fitzgerald July 2, 2024, 11:08 a.m. UTC
Add a check to cs_dsp_coeff_write_ctrl() to abort if the control
is not writeable.

The cs_dsp code originated as an ASoC driver (wm_adsp) where all
controls were exported as ALSA controls. It relied on ALSA to
enforce the read-only permission. Now that the code has been
separated from ALSA/ASoC it must perform its own permission check.

This isn't currently causing any problems so there shouldn't be any
need to backport this. If the client of cs_dsp exposes the control as
an ALSA control, it should set permissions on that ALSA control to
protect it. The few uses of cs_dsp_coeff_write_ctrl() inside drivers
are for writable controls.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
---
 drivers/firmware/cirrus/cs_dsp.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Mark Brown July 2, 2024, 6:03 p.m. UTC | #1
On Tue, 02 Jul 2024 12:08:09 +0100, Richard Fitzgerald wrote:
> Add a check to cs_dsp_coeff_write_ctrl() to abort if the control
> is not writeable.
> 
> The cs_dsp code originated as an ASoC driver (wm_adsp) where all
> controls were exported as ALSA controls. It relied on ALSA to
> enforce the read-only permission. Now that the code has been
> separated from ALSA/ASoC it must perform its own permission check.
> 
> [...]

Applied to

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

Thanks!

[1/1] firmware: cs_dsp: Don't allow writes to read-only controls
      commit: 62412a9357b16a4e39dc582deb2e2a682b92524c

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/drivers/firmware/cirrus/cs_dsp.c b/drivers/firmware/cirrus/cs_dsp.c
index 16484ab9b09d..be8747d227db 100644
--- a/drivers/firmware/cirrus/cs_dsp.c
+++ b/drivers/firmware/cirrus/cs_dsp.c
@@ -796,6 +796,9 @@  int cs_dsp_coeff_write_ctrl(struct cs_dsp_coeff_ctl *ctl,
 
 	lockdep_assert_held(&ctl->dsp->pwr_lock);
 
+	if (ctl->flags && !(ctl->flags & WMFW_CTL_FLAG_WRITEABLE))
+		return -EPERM;
+
 	if (len + off * sizeof(u32) > ctl->len)
 		return -EINVAL;