]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
soc: mediatek: svs: Fix memory leak in svs_enable_debug_write()
authorZilin Guan <zilin@seu.edu.cn>
Sun, 28 Dec 2025 16:26:36 +0000 (16:26 +0000)
committerAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Thu, 8 Jan 2026 09:17:08 +0000 (10:17 +0100)
In svs_enable_debug_write(), the buf allocated by memdup_user_nul()
is leaked if kstrtoint() fails.

Fix this by using __free(kfree) to automatically free buf, eliminating
the need for explicit kfree() calls and preventing leaks.

Fixes: 13f1bbcfb582 ("soc: mediatek: SVS: add debug commands")
Co-developed-by: Jianhao Xu <jianhao.xu@seu.edu.cn>
Signed-off-by: Jianhao Xu <jianhao.xu@seu.edu.cn>
Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
[Angelo: Added missing cleanup.h inclusion]
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
drivers/soc/mediatek/mtk-svs.c

index f45537546553ecf44ea1f208f9e80342fb7fa33d..99edecb204f2547129cf196ec297bb42adee5f5f 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/bits.h>
 #include <linux/clk.h>
 #include <linux/completion.h>
+#include <linux/cleanup.h>
 #include <linux/cpu.h>
 #include <linux/cpuidle.h>
 #include <linux/debugfs.h>
@@ -789,7 +790,7 @@ static ssize_t svs_enable_debug_write(struct file *filp,
        struct svs_bank *svsb = file_inode(filp)->i_private;
        struct svs_platform *svsp = dev_get_drvdata(svsb->dev);
        int enabled, ret;
-       char *buf = NULL;
+       char *buf __free(kfree) = NULL;
 
        if (count >= PAGE_SIZE)
                return -EINVAL;
@@ -807,8 +808,6 @@ static ssize_t svs_enable_debug_write(struct file *filp,
                svsb->mode_support = SVSB_MODE_ALL_DISABLE;
        }
 
-       kfree(buf);
-
        return count;
 }