public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Richard Fitzgerald <rf@opensource.cirrus.com>,
	Mark Brown <broonie@kernel.org>, Sasha Levin <sashal@kernel.org>,
	lgirdwood@gmail.com, perex@perex.cz, tiwai@suse.com,
	simont@opensource.cirrus.com, jarkko.nikula@bitmer.com,
	claudiu.beznea@tuxon.dev, kuninori.morimoto.gx@renesas.com,
	dinghao.liu@zju.edu.cn, ckeepax@opensource.cirrus.com,
	patches@opensource.cirrus.com, linux-sound@vger.kernel.org
Subject: [PATCH AUTOSEL 6.1 17/29] ASoC: wm_adsp: Don't overwrite fwf_name with the default
Date: Wed,  7 Feb 2024 16:24:42 -0500	[thread overview]
Message-ID: <20240207212505.3169-17-sashal@kernel.org> (raw)
In-Reply-To: <20240207212505.3169-1-sashal@kernel.org>

From: Richard Fitzgerald <rf@opensource.cirrus.com>

[ Upstream commit daf3f0f99cde93a066240462b7a87cdfeedc04c0 ]

There's no need to overwrite fwf_name with a kstrdup() of the cs_dsp part
name. It is trivial to select either fwf_name or cs_dsp.part as the string
to use when building the filename in wm_adsp_request_firmware_file().

This leaves fwf_name entirely owned by the codec driver.

It also avoids problems with freeing the pointer. With the original code
fwf_name was either a pointer owned by the codec driver, or a kstrdup()
created by wm_adsp. This meant wm_adsp must free it if it set it, but not
if the codec driver set it. The code was handling this by using
devm_kstrdup().
But there is no absolute requirement that wm_adsp_common_init() must be
called from probe(), so this was a pseudo-memory leak - each new call to
wm_adsp_common_init() would allocate another block of memory but these
would only be freed if the owning codec driver was removed.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://msgid.link/r/20240129162737.497-3-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 sound/soc/codecs/wm_adsp.c | 29 ++++++++++++-----------------
 1 file changed, 12 insertions(+), 17 deletions(-)

diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
index 2cfca78f0401..47a4c363227c 100644
--- a/sound/soc/codecs/wm_adsp.c
+++ b/sound/soc/codecs/wm_adsp.c
@@ -740,19 +740,25 @@ static int wm_adsp_request_firmware_file(struct wm_adsp *dsp,
 					 const char *filetype)
 {
 	struct cs_dsp *cs_dsp = &dsp->cs_dsp;
+	const char *fwf;
 	char *s, c;
 	int ret = 0;
 
+	if (dsp->fwf_name)
+		fwf = dsp->fwf_name;
+	else
+		fwf = dsp->cs_dsp.name;
+
 	if (system_name && asoc_component_prefix)
 		*filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s-%s-%s.%s", dir, dsp->part,
-				      dsp->fwf_name, wm_adsp_fw[dsp->fw].file, system_name,
+				      fwf, wm_adsp_fw[dsp->fw].file, system_name,
 				      asoc_component_prefix, filetype);
 	else if (system_name)
 		*filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s-%s.%s", dir, dsp->part,
-				      dsp->fwf_name, wm_adsp_fw[dsp->fw].file, system_name,
+				      fwf, wm_adsp_fw[dsp->fw].file, system_name,
 				      filetype);
 	else
-		*filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s.%s", dir, dsp->part, dsp->fwf_name,
+		*filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s.%s", dir, dsp->part, fwf,
 				      wm_adsp_fw[dsp->fw].file, filetype);
 
 	if (*filename == NULL)
@@ -842,29 +848,18 @@ static int wm_adsp_request_firmware_files(struct wm_adsp *dsp,
 	}
 
 	adsp_err(dsp, "Failed to request firmware <%s>%s-%s-%s<-%s<%s>>.wmfw\n",
-		 cirrus_dir, dsp->part, dsp->fwf_name, wm_adsp_fw[dsp->fw].file,
-		 system_name, asoc_component_prefix);
+		 cirrus_dir, dsp->part,
+		 dsp->fwf_name ? dsp->fwf_name : dsp->cs_dsp.name,
+		 wm_adsp_fw[dsp->fw].file, system_name, asoc_component_prefix);
 
 	return -ENOENT;
 }
 
 static int wm_adsp_common_init(struct wm_adsp *dsp)
 {
-	char *p;
-
 	INIT_LIST_HEAD(&dsp->compr_list);
 	INIT_LIST_HEAD(&dsp->buffer_list);
 
-	if (!dsp->fwf_name) {
-		p = devm_kstrdup(dsp->cs_dsp.dev, dsp->cs_dsp.name, GFP_KERNEL);
-		if (!p)
-			return -ENOMEM;
-
-		dsp->fwf_name = p;
-		for (; *p != 0; ++p)
-			*p = tolower(*p);
-	}
-
 	return 0;
 }
 
-- 
2.43.0


  parent reply	other threads:[~2024-02-07 21:25 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-07 21:24 [PATCH AUTOSEL 6.1 01/29] ext4: avoid dividing by 0 in mb_update_avg_fragment_size() when block bitmap corrupt Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 02/29] ext4: avoid allocating blocks from corrupted group in ext4_mb_try_best_found() Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 03/29] ext4: avoid allocating blocks from corrupted group in ext4_mb_find_by_goal() Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 04/29] Input: goodix - accept ACPI resources with gpio_count == 3 && gpio_int_idx == 0 Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 05/29] dmaengine: ti: edma: Add some null pointer checks to the edma_probe Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 06/29] ASoC: codecs: wcd934x: drop unneeded regulator include Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 07/29] regulator: pwm-regulator: Add validity checks in continuous .get_voltage Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 08/29] nvmet-tcp: fix nvme tcp ida memory leak Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 09/29] usb: ucsi_acpi: Quirk to ack a connector change ack cmd Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 10/29] ALSA: usb-audio: Check presence of valid altsetting control Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 11/29] ASoC: sunxi: sun4i-spdif: Add support for Allwinner H616 Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 12/29] spi: sh-msiof: avoid integer overflow in constants Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 13/29] Input: xpad - add Lenovo Legion Go controllers Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 14/29] misc: open-dice: Fix spurious lockdep warning Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 15/29] netfilter: conntrack: check SCTP_CID_SHUTDOWN_ACK for vtag setting in sctp_new Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 16/29] drm/amd/display: increased min_dcfclk_mhz and min_fclk_mhz Sasha Levin
2024-02-07 21:24 ` Sasha Levin [this message]
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 18/29] ALSA: usb-audio: Ignore clock selector errors for single connection Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 19/29] nvme-fc: do not wait in vain when unloading module Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 20/29] nvmet-fcloop: swap the list_add_tail arguments Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 21/29] nvmet-fc: release reference on target port Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 22/29] nvmet-fc: defer cleanup using RCU properly Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 23/29] nvmet-fc: hold reference on hostport match Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 24/29] nvmet-fc: abort command when there is no binding Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 25/29] nvmet-fc: avoid deadlock on delete association path Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 26/29] nvmet-fc: take ref count on tgtport before delete assoc Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 27/29] smb: client: increase number of PDUs allowed in a compound request Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 28/29] ext4: correct the hole length returned by ext4_map_blocks() Sasha Levin
2024-02-07 21:24 ` [PATCH AUTOSEL 6.1 29/29] Input: i8042 - add Fujitsu Lifebook U728 to i8042 quirk table Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240207212505.3169-17-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=broonie@kernel.org \
    --cc=ckeepax@opensource.cirrus.com \
    --cc=claudiu.beznea@tuxon.dev \
    --cc=dinghao.liu@zju.edu.cn \
    --cc=jarkko.nikula@bitmer.com \
    --cc=kuninori.morimoto.gx@renesas.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=patches@opensource.cirrus.com \
    --cc=perex@perex.cz \
    --cc=rf@opensource.cirrus.com \
    --cc=simont@opensource.cirrus.com \
    --cc=stable@vger.kernel.org \
    --cc=tiwai@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox