From 4a41ce6f2902553e3fc3673b7cdf3bf770c7873f Mon Sep 17 00:00:00 2001 From: Yuanhe Shu Date: Wed, 11 Mar 2026 19:33:47 +0800 Subject: [PATCH] anolis: pstore: fix memleak in loaded_backend_show() ANBZ: #31466 Fix the memleak that loaded_backend has not been freed. Signed-off-by: Yuanhe Shu --- fs/pstore/inode.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/fs/pstore/inode.c b/fs/pstore/inode.c index 85f90cdc163f..5471d419a1b6 100644 --- a/fs/pstore/inode.c +++ b/fs/pstore/inode.c @@ -499,23 +499,35 @@ static ssize_t loaded_backend_show(struct kobject *k, { struct pstore_info_list *entry; char *old, *loaded_backend = NULL; + ssize_t ret; if (!psback) return sprintf(buf, "null\n"); mutex_lock(&psback_lock); - list_for_each_entry(entry, &psback->list_entry, list) - if (!loaded_backend) + list_for_each_entry(entry, &psback->list_entry, list) { + if (!loaded_backend) { loaded_backend = kstrdup(entry->psi->name, GFP_KERNEL); - else { + if (!loaded_backend) { + mutex_unlock(&psback_lock); + return -ENOMEM; + } + } else { old = loaded_backend; loaded_backend = kasprintf(GFP_KERNEL, "%s,%s", old, entry->psi->name); kfree(old); + if (!loaded_backend) { + mutex_unlock(&psback_lock); + return -ENOMEM; + } } + } mutex_unlock(&psback_lock); - return sprintf(buf, "%s\n", loaded_backend); + ret = sprintf(buf, "%s\n", loaded_backend); + kfree(loaded_backend); + return ret; } static struct kobj_attribute backend_attribute = -- Gitee