The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH 0/4] Series of SDCA bug fixes
@ 2026-07-22 10:34 Charles Keepax
  2026-07-22 10:34 ` [PATCH 1/4] ASoC: SDCA: Correct pointer passed to devm_acpi_table_put Charles Keepax
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Charles Keepax @ 2026-07-22 10:34 UTC (permalink / raw)
  To: broonie
  Cc: lgirdwood, yung-chuan.liao, pierre-louis.bossart, linux-sound,
	linux-kernel, patches

Fix up some error path and size checking issues in the SDCA code.

Thanks,
Charles

Charles Keepax (4):
  ASoC: SDCA: Correct pointer passed to devm_acpi_table_put
  ASoC: SDCA: Always free firmware in FDL path
  ASoC: SDCA: Make UMP message size check more robust
  ASoC: SDCA: Ensure that Control Range is large enough for header

 sound/soc/sdca/sdca_device.c    | 2 +-
 sound/soc/sdca/sdca_fdl.c       | 5 ++++-
 sound/soc/sdca/sdca_functions.c | 2 ++
 sound/soc/sdca/sdca_ump.c       | 4 ++--
 4 files changed, 9 insertions(+), 4 deletions(-)

-- 
2.47.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/4] ASoC: SDCA: Correct pointer passed to devm_acpi_table_put
  2026-07-22 10:34 [PATCH 0/4] Series of SDCA bug fixes Charles Keepax
@ 2026-07-22 10:34 ` Charles Keepax
  2026-07-22 10:34 ` [PATCH 2/4] ASoC: SDCA: Always free firmware in FDL path Charles Keepax
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Charles Keepax @ 2026-07-22 10:34 UTC (permalink / raw)
  To: broonie
  Cc: lgirdwood, yung-chuan.liao, pierre-louis.bossart, linux-sound,
	linux-kernel, patches

devm_acpi_table_put() takes a struct acpi_table_header * but the value
passed in is struct acpi_table_header ** so the value passed to
acpi_put_table() is actually the pointer not the table itself.

Remove the extra reference to correct the passed value.

Fixes: c4d096c3ca42 ("ASoC: SDCA: Add SDCA FDL data parsing")
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
---
 sound/soc/sdca/sdca_device.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/sdca/sdca_device.c b/sound/soc/sdca/sdca_device.c
index 405e80b979de8..4bcd8d1fdff82 100644
--- a/sound/soc/sdca/sdca_device.c
+++ b/sound/soc/sdca/sdca_device.c
@@ -43,7 +43,7 @@ void sdca_lookup_swft(struct sdw_slave *slave)
 		dev_info(&slave->dev, "SWFT not available\n");
 	else
 		devm_add_action_or_reset(&slave->dev, devm_acpi_table_put,
-					 &slave->sdca_data.swft);
+					 slave->sdca_data.swft);
 }
 EXPORT_SYMBOL_NS(sdca_lookup_swft, "SND_SOC_SDCA");
 
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/4] ASoC: SDCA: Always free firmware in FDL path
  2026-07-22 10:34 [PATCH 0/4] Series of SDCA bug fixes Charles Keepax
  2026-07-22 10:34 ` [PATCH 1/4] ASoC: SDCA: Correct pointer passed to devm_acpi_table_put Charles Keepax
@ 2026-07-22 10:34 ` Charles Keepax
  2026-07-22 10:34 ` [PATCH 3/4] ASoC: SDCA: Make UMP message size check more robust Charles Keepax
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Charles Keepax @ 2026-07-22 10:34 UTC (permalink / raw)
  To: broonie
  Cc: lgirdwood, yung-chuan.liao, pierre-louis.bossart, linux-sound,
	linux-kernel, patches

In the case a disk firmware exists but is invalid and no SWFT firmware
exists fdl_load_file() will return without calling release_firmware().
Update the code to call this to ensure the firmware is released on the
error path.

Fixes: 71f7990a34cd ("ASoC: SDCA: Add FDL library for XU entities")
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
---
 sound/soc/sdca/sdca_fdl.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/sound/soc/sdca/sdca_fdl.c b/sound/soc/sdca/sdca_fdl.c
index 994821a6df617..60fdd406220d4 100644
--- a/sound/soc/sdca/sdca_fdl.c
+++ b/sound/soc/sdca/sdca_fdl.c
@@ -258,7 +258,8 @@ static int fdl_load_file(struct sdca_interrupt *interrupt,
 
 	if (!swf) {
 		dev_err(dev, "failed to locate SWF\n");
-		return -ENOENT;
+		ret = -ENOENT;
+		goto error;
 	}
 
 	dev_info(dev, "loading SWF: %x-%x-%x\n",
@@ -270,6 +271,8 @@ static int fdl_load_file(struct sdca_interrupt *interrupt,
 				     SDCA_CTL_XU_FDL_MESSAGEOFFSET, fdl_file->fdl_offset,
 				     SDCA_CTL_XU_FDL_MESSAGELENGTH, swf->data,
 				     swf->file_length - offsetof(struct acpi_sw_file, data));
+
+error:
 	release_firmware(firmware);
 	return ret;
 }
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/4] ASoC: SDCA: Make UMP message size check more robust
  2026-07-22 10:34 [PATCH 0/4] Series of SDCA bug fixes Charles Keepax
  2026-07-22 10:34 ` [PATCH 1/4] ASoC: SDCA: Correct pointer passed to devm_acpi_table_put Charles Keepax
  2026-07-22 10:34 ` [PATCH 2/4] ASoC: SDCA: Always free firmware in FDL path Charles Keepax
@ 2026-07-22 10:34 ` Charles Keepax
  2026-07-22 10:35 ` [PATCH 4/4] ASoC: SDCA: Ensure that Control Range is large enough for header Charles Keepax
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Charles Keepax @ 2026-07-22 10:34 UTC (permalink / raw)
  To: broonie
  Cc: lgirdwood, yung-chuan.liao, pierre-louis.bossart, linux-sound,
	linux-kernel, patches

If message offset was larger than the buffer length the size
check will pass incorrectly. Refactor the check such that it is
more robust to invalid sizes.

Fixes: daab108504be ("ASoC: SDCA: Add UMP buffer helper functions")
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
---
 sound/soc/sdca/sdca_ump.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sound/soc/sdca/sdca_ump.c b/sound/soc/sdca/sdca_ump.c
index a86bb28c6d0ad..82a8bf75bbca5 100644
--- a/sound/soc/sdca/sdca_ump.c
+++ b/sound/soc/sdca/sdca_ump.c
@@ -141,7 +141,7 @@ int sdca_ump_read_message(struct device *dev,
 		return ret;
 	}
 
-	if (msg_len > buf_len - msg_offset) {
+	if (msg_offset + msg_len > buf_len) {
 		dev_err(dev, "%s: message too big for UMP buffer: %d\n",
 			entity->label, msg_len);
 		return -EINVAL;
@@ -207,7 +207,7 @@ int sdca_ump_write_message(struct device *dev,
 	buf_len = sdca_range(range, SDCA_MESSAGEOFFSET_BUFFER_LENGTH, 0);
 	ump_mode = sdca_range(range, SDCA_MESSAGEOFFSET_UMP_MODE, 0);
 
-	if (msg_len > buf_len - msg_offset) {
+	if (msg_offset + msg_len > buf_len) {
 		dev_err(dev, "%s: message too big for UMP buffer: %d\n",
 			entity->label, msg_len);
 		return -EINVAL;
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 4/4] ASoC: SDCA: Ensure that Control Range is large enough for header
  2026-07-22 10:34 [PATCH 0/4] Series of SDCA bug fixes Charles Keepax
                   ` (2 preceding siblings ...)
  2026-07-22 10:34 ` [PATCH 3/4] ASoC: SDCA: Make UMP message size check more robust Charles Keepax
@ 2026-07-22 10:35 ` Charles Keepax
  2026-07-22 18:15 ` [PATCH 0/4] Series of SDCA bug fixes Pierre-Louis Bossart
  2026-07-23 20:11 ` Mark Brown
  5 siblings, 0 replies; 7+ messages in thread
From: Charles Keepax @ 2026-07-22 10:35 UTC (permalink / raw)
  To: broonie
  Cc: lgirdwood, yung-chuan.liao, pierre-louis.bossart, linux-sound,
	linux-kernel, patches

When reading the Ranges structure from an SDCA Control, ensure that the
read data is large enough to encompass the required header before
accessing it.

Fixes: 64fb5af1d1bb ("ASoC: SDCA: Add parsing for Control range structures")
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
---
 sound/soc/sdca/sdca_functions.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sound/soc/sdca/sdca_functions.c b/sound/soc/sdca/sdca_functions.c
index 77940bd6b33c9..7a7a9f1a49389 100644
--- a/sound/soc/sdca/sdca_functions.c
+++ b/sound/soc/sdca/sdca_functions.c
@@ -855,6 +855,8 @@ static int find_sdca_control_range(struct device *dev,
 		return 0;
 	else if (num_range < 0)
 		return num_range;
+	else if (num_range < 2 * sizeof(*limits))
+		return -EINVAL;
 
 	range_list = devm_kcalloc(dev, num_range, sizeof(*range_list), GFP_KERNEL);
 	if (!range_list)
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/4] Series of SDCA bug fixes
  2026-07-22 10:34 [PATCH 0/4] Series of SDCA bug fixes Charles Keepax
                   ` (3 preceding siblings ...)
  2026-07-22 10:35 ` [PATCH 4/4] ASoC: SDCA: Ensure that Control Range is large enough for header Charles Keepax
@ 2026-07-22 18:15 ` Pierre-Louis Bossart
  2026-07-23 20:11 ` Mark Brown
  5 siblings, 0 replies; 7+ messages in thread
From: Pierre-Louis Bossart @ 2026-07-22 18:15 UTC (permalink / raw)
  To: Charles Keepax, broonie
  Cc: lgirdwood, yung-chuan.liao, linux-sound, linux-kernel, patches

On 7/22/26 12:34, Charles Keepax wrote:
> Fix up some error path and size checking issues in the SDCA code.
> 
> Thanks,
> Charles
> 
> Charles Keepax (4):
>   ASoC: SDCA: Correct pointer passed to devm_acpi_table_put
>   ASoC: SDCA: Always free firmware in FDL path
>   ASoC: SDCA: Make UMP message size check more robust
>   ASoC: SDCA: Ensure that Control Range is large enough for header

LGTM

Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>

> 
>  sound/soc/sdca/sdca_device.c    | 2 +-
>  sound/soc/sdca/sdca_fdl.c       | 5 ++++-
>  sound/soc/sdca/sdca_functions.c | 2 ++
>  sound/soc/sdca/sdca_ump.c       | 4 ++--
>  4 files changed, 9 insertions(+), 4 deletions(-)
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/4] Series of SDCA bug fixes
  2026-07-22 10:34 [PATCH 0/4] Series of SDCA bug fixes Charles Keepax
                   ` (4 preceding siblings ...)
  2026-07-22 18:15 ` [PATCH 0/4] Series of SDCA bug fixes Pierre-Louis Bossart
@ 2026-07-23 20:11 ` Mark Brown
  5 siblings, 0 replies; 7+ messages in thread
From: Mark Brown @ 2026-07-23 20:11 UTC (permalink / raw)
  To: Charles Keepax
  Cc: lgirdwood, yung-chuan.liao, pierre-louis.bossart, linux-sound,
	linux-kernel, patches

On Wed, 22 Jul 2026 11:34:56 +0100, Charles Keepax wrote:
> Series of SDCA bug fixes
> 
> Fix up some error path and size checking issues in the SDCA code.
> 
> Thanks,
> Charles
> 
> [...]

Applied to

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

Thanks!

[1/4] ASoC: SDCA: Correct pointer passed to devm_acpi_table_put
      https://git.kernel.org/broonie/sound/c/6a50332e194f
[2/4] ASoC: SDCA: Always free firmware in FDL path
      https://git.kernel.org/broonie/sound/c/7f64ccc374b2
[3/4] ASoC: SDCA: Make UMP message size check more robust
      https://git.kernel.org/broonie/sound/c/556d872e7c2a
[4/4] ASoC: SDCA: Ensure that Control Range is large enough for header
      https://git.kernel.org/broonie/sound/c/951e921b039b

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


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-07-24  0:59 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-22 10:34 [PATCH 0/4] Series of SDCA bug fixes Charles Keepax
2026-07-22 10:34 ` [PATCH 1/4] ASoC: SDCA: Correct pointer passed to devm_acpi_table_put Charles Keepax
2026-07-22 10:34 ` [PATCH 2/4] ASoC: SDCA: Always free firmware in FDL path Charles Keepax
2026-07-22 10:34 ` [PATCH 3/4] ASoC: SDCA: Make UMP message size check more robust Charles Keepax
2026-07-22 10:35 ` [PATCH 4/4] ASoC: SDCA: Ensure that Control Range is large enough for header Charles Keepax
2026-07-22 18:15 ` [PATCH 0/4] Series of SDCA bug fixes Pierre-Louis Bossart
2026-07-23 20:11 ` Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox