Skip to content

Commit 5b933c7

Browse files
rfvirgilbroonie
authored andcommitted
firmware: cs_dsp: Fix overrun of unterminated control name string
For wmfw format v2 and later the coefficient name strings have a length field and are NOT null-terminated. Use kasprintf() to convert the unterminated string into a null-terminated string in an allocated buffer. The previous code handled this duplication incorrectly using kmemdup() and getting the length from a strlen() of the (unterminated) source string. This resulted in creating a string that continued up to the next byte in the firmware file that just happened to be 0x00. Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> Fixes: f6bc909 ("firmware: cs_dsp: add driver to support firmware loading on Cirrus Logic DSPs") Link: https://lore.kernel.org/r/20220412163927.1303470-1-rf@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent ddfd534 commit 5b933c7

1 file changed

Lines changed: 1 addition & 2 deletions

File tree

drivers/firmware/cirrus/cs_dsp.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -955,8 +955,7 @@ static int cs_dsp_create_control(struct cs_dsp *dsp,
955955
ctl->alg_region = *alg_region;
956956
if (subname && dsp->fw_ver >= 2) {
957957
ctl->subname_len = subname_len;
958-
ctl->subname = kmemdup(subname,
959-
strlen(subname) + 1, GFP_KERNEL);
958+
ctl->subname = kasprintf(GFP_KERNEL, "%.*s", subname_len, subname);
960959
if (!ctl->subname) {
961960
ret = -ENOMEM;
962961
goto err_ctl;

0 commit comments

Comments
 (0)