]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
firmware: cs_dsp: Remove __free() from cs_dsp_debugfs_string_read()
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Tue, 2 Dec 2025 11:34:25 +0000 (11:34 +0000)
committerMark Brown <broonie@kernel.org>
Sun, 14 Dec 2025 10:37:31 +0000 (19:37 +0900)
Don't use __free(kfree) in cs_dsp_debugfs_string_read. Instead use
normal kfree() to cleanup.

The use of __free() can create new cleanup bugs that are difficult to spot
because the defective code is idiomatically correct regular C. This
function used the suspect declaration __free(kfree) = NULL;.

The __free(kfree) didn't really do anything here. The function can be
rearranged to avoid any need to return or goto within the code.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Fixes: 3045e29d248b ("firmware: cs_dsp: Append \n to debugfs string during read")
Link: https://patch.msgid.link/20251202113425.413700-1-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/firmware/cirrus/cs_dsp.c

index 525ac0f0a75d8f4e15f35a829e504df38f19fed1..8d2e7267d973db8e36deb32cdc2b78e4e9de0dc5 100644 (file)
@@ -375,18 +375,23 @@ static ssize_t cs_dsp_debugfs_string_read(struct cs_dsp *dsp,
                                          size_t count, loff_t *ppos,
                                          const char **pstr)
 {
-       const char *str __free(kfree) = NULL;
+       const char *str;
+       ssize_t ret = 0;
 
        scoped_guard(mutex, &dsp->pwr_lock) {
-               if (!*pstr)
-                       return 0;
-
-               str = kasprintf(GFP_KERNEL, "%s\n", *pstr);
-               if (!str)
-                       return -ENOMEM;
-
-               return simple_read_from_buffer(user_buf, count, ppos, str, strlen(str));
+               if (*pstr) {
+                       str = kasprintf(GFP_KERNEL, "%s\n", *pstr);
+                       if (str) {
+                               ret = simple_read_from_buffer(user_buf, count,
+                                                             ppos, str, strlen(str));
+                               kfree(str);
+                       } else {
+                               ret = -ENOMEM;
+                       }
+               }
        }
+
+       return ret;
 }
 
 static ssize_t cs_dsp_debugfs_wmfw_read(struct file *file,