firmware: cs_dsp: Don't use __free() in cs_dsp_load() and cs_dsp_load_coeff()
Subsystems (2)
Richard Fitzgerald
maintainerPATCH 1/1 firmware: cs_dsp: Don't use __free() in cs_dsp_load() and cs_dsp_load_coeff()
Replace the __free(kfree) in cs_dsp_load() and cs_dsp_load_coeff() with a kfree(buf) at the end of the function.
The use of __free() can create new cleanup bugs that are difficult to spot because the defective code is idiomatically correct regular C. In these two functions the __free() was mixed with gotos, and also used the suspect declaration __free(kfree) = NULL;.
The __free() did not do anything to simplify the code. There aren't any early returns after the pointer is set, and the __free() can be replaced by a kfree() at the end of the function.
--- drivers/firmware/cirrus/cs_dsp.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/firmware/cirrus/cs_dsp.c +6 -2
@@ -1446,7 +1446,7 @@ static int cs_dsp_load(struct cs_dsp *dsp, const struct firmware *firmware,const struct wmfw_region *region;const struct cs_dsp_region *mem;const char *region_name; - u8 *buf __free(kfree) = NULL; +u8 *buf =NULL ;size_t buf_len =0 ;size_t region_len;unsigned int reg;
@@ -1601,6 +1601,8 @@ static int cs_dsp_load(struct cs_dsp *dsp, const struct firmware *firmware, ret =0 ; out_fw: +kfree (buf); +if (ret == -EOVERFLOW )cs_dsp_err (dsp,"%s: file content overflows file data\n" , file);
@@ -2132,7 +2134,7 @@ static int cs_dsp_load_coeff(struct cs_dsp *dsp, const struct firmware *firmwarestruct cs_dsp_alg_region *alg_region;const char *region_name;int ret, pos, blocks, type, offset, reg, version; - u8 *buf __free(kfree) = NULL; +u8 *buf =NULL ;size_t buf_len =0 ;size_t region_len;
@@ -2311,6 +2313,8 @@ static int cs_dsp_load_coeff(struct cs_dsp *dsp, const struct firmware *firmware ret =0 ; out_fw: +kfree (buf); +if (ret == -EOVERFLOW )cs_dsp_err (dsp,"%s: file content overflows file data\n" , file);
Signature · 1 line
2.47.3
Quoted 9 lines · Richard Fitzgerald
Replace the
__free(kfree)incs_dsp_load()andcs_dsp_load_coeff()with a kfree(buf) at the end of the function.The use of
__free()can create new cleanup bugs that are difficult to spot because the defective code is idiomatically correct regular C. In these two functions the__free()was mixed with gotos, and also used the suspect declaration__free(kfree)= NULL;.[...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
Thanks!
[1/1] firmware: cs_dsp: Don't use __free() in cs_dsp_load() and cs_dsp_load_coeff()
commit: ae9ccaed3f6701ee0fe40ad919516e0aa0844f21
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