* [PATCH v2] ubi: fastmap: fix ubi->fm memory leak
@ 2025-11-07 10:00 Liyuan Pang
2025-11-07 12:13 ` Markus Elfring
0 siblings, 1 reply; 4+ messages in thread
From: Liyuan Pang @ 2025-11-07 10:00 UTC (permalink / raw)
To: richard, chengzhihao1, miquel.raynal, vigneshr, mcoquelin.stm32,
alexandre.torgue, markus.elfring
Cc: linux-mtd, linux-kernel, linux-stm32, linux-arm-kernel, wanqian10,
young.liuyang, Liyuan Pang
The problem is that scan_fast() allocate memory for ubi->fm
and ubi->fm->e[x], but if the following attach process fails
in ubi_wl_init or ubi_read_volume_table, the whole attach
process will fail without executing ubi_wl_close to free the
memory under ubi->fm.
Fix this by add a new ubi_free_fastmap function in fastmap.c
to free the memory allocated for fm.
If SLUB_DEBUG and KUNIT are enabled, the following warning messages
will show:
ubi0: detaching mtd0
ubi0: mtd0 is detached
ubi0: default fastmap pool size: 200
ubi0: default fastmap WL pool size: 100
ubi0: attaching mtd0
ubi0: attached by fastmap
ubi0: fastmap pool size: 200
ubi0: fastmap WL pool size: 100
ubi0 error: ubi_wl_init [ubi]: no enough physical eraseblocks (4, need 203)
ubi0 error: ubi_attach_mtd_dev [ubi]: failed to attach mtd0, error -28
UBI error: cannot attach mtd0
=================================================================
BUG ubi_wl_entry_slab (Tainted: G B O L ): Objects remaining in ubi_wl_entry_slab on __kmem_cache_shutdown()
-----------------------------------------------------------------------------
Slab 0xffff2fd23a40cd00 objects=22 used=1 fp=0xffff2fd1d0334fd8 flags=0x883fffc010200(slab|head|section=34|node=0|zone=1|lastcpupid=0x7fff)
CPU: 0 PID: 5884 Comm: insmod Tainted: G B O L 5.10.0 #1
Hardware name: LS1043A RDB Board (DT)
Call trace:
dump_backtrace+0x0/0x198
show_stack+0x18/0x28
dump_stack+0xe8/0x15c
slab_err+0x94/0xc0
__kmem_cache_shutdown+0x1fc/0x39c
kmem_cache_destroy+0x48/0x138
ubi_init+0x1d4/0xf34 [ubi]
do_one_initcall+0xb4/0x24c
do_init_module+0x4c/0x1dc
load_module+0x212c/0x2260
__se_sys_finit_module+0xb4/0xd8
__arm64_sys_finit_module+0x18/0x28
el0_svc_common.constprop.0+0x78/0x1a0
do_el0_svc+0x78/0x90
el0_svc+0x20/0x38
el0_sync_handler+0xf0/0x140
normal+0x3d8/0x400
Object 0xffff2fd1d0334e68 @offset=3688
Allocated in ubi_scan_fastmap+0xf04/0xf40 [ubi] age=80 cpu=0 pid=5884
__slab_alloc.isra.21+0x6c/0xb4
kmem_cache_alloc+0x1e4/0x80c
ubi_scan_fastmap+0xf04/0xf40 [ubi]
ubi_attach+0x1f0/0x3a8 [ubi]
ubi_attach_mtd_dev+0x810/0xbc8 [ubi]
ubi_init+0x238/0xf34 [ubi]
do_one_initcall+0xb4/0x24c
do_init_module+0x4c/0x1dc
load_module+0x212c/0x2260
__se_sys_finit_module+0xb4/0xd8
__arm64_sys_finit_module+0x18/0x28
el0_svc_common.constprop.0+0x78/0x1a0
do_el0_svc+0x78/0x90
el0_svc+0x20/0x38
el0_sync_handler+0xf0/0x140
normal+0x3d8/0x400
Link: https://bugzilla.kernel.org/show_bug.cgi?id=220744
Signed-off-by: Liyuan Pang <pangliyuan1@huawei.com>
Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com>
---
Changes in v2:
* reduce the scope of variable "i" to the code block of the if branch
* make ubi_free_fastmap an static inline function
* link to v1:
https://lore.kernel.org/linux-mtd/20251107093843.1077536-1-pangliyuan1@huawei.com/T/#t
---
drivers/mtd/ubi/attach.c | 4 +++-
drivers/mtd/ubi/fastmap-wl.c | 8 +-------
drivers/mtd/ubi/ubi.h | 12 ++++++++++++
3 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/drivers/mtd/ubi/attach.c b/drivers/mtd/ubi/attach.c
index adc47b87b38a..884171871d0e 100644
--- a/drivers/mtd/ubi/attach.c
+++ b/drivers/mtd/ubi/attach.c
@@ -1600,7 +1600,7 @@ int ubi_attach(struct ubi_device *ubi, int force_scan)
err = ubi_read_volume_table(ubi, ai);
if (err)
- goto out_ai;
+ goto out_fm;
err = ubi_wl_init(ubi, ai);
if (err)
@@ -1642,6 +1642,8 @@ int ubi_attach(struct ubi_device *ubi, int force_scan)
out_vtbl:
ubi_free_all_volumes(ubi);
vfree(ubi->vtbl);
+out_fm:
+ ubi_free_fastmap(ubi);
out_ai:
destroy_ai(ai);
return err;
diff --git a/drivers/mtd/ubi/fastmap-wl.c b/drivers/mtd/ubi/fastmap-wl.c
index 9bdb6525f128..e2bc1122bfd3 100644
--- a/drivers/mtd/ubi/fastmap-wl.c
+++ b/drivers/mtd/ubi/fastmap-wl.c
@@ -530,8 +530,6 @@ int ubi_is_erase_work(struct ubi_work *wrk)
static void ubi_fastmap_close(struct ubi_device *ubi)
{
- int i;
-
return_unused_pool_pebs(ubi, &ubi->fm_pool);
return_unused_pool_pebs(ubi, &ubi->fm_wl_pool);
@@ -540,11 +538,7 @@ static void ubi_fastmap_close(struct ubi_device *ubi)
ubi->fm_anchor = NULL;
}
- if (ubi->fm) {
- for (i = 0; i < ubi->fm->used_blocks; i++)
- kfree(ubi->fm->e[i]);
- }
- kfree(ubi->fm);
+ ubi_free_fastmap(ubi);
}
/**
diff --git a/drivers/mtd/ubi/ubi.h b/drivers/mtd/ubi/ubi.h
index c792b9bcab9b..44803d3329f4 100644
--- a/drivers/mtd/ubi/ubi.h
+++ b/drivers/mtd/ubi/ubi.h
@@ -969,10 +969,22 @@ int ubi_scan_fastmap(struct ubi_device *ubi, struct ubi_attach_info *ai,
struct ubi_attach_info *scan_ai);
int ubi_fastmap_init_checkmap(struct ubi_volume *vol, int leb_count);
void ubi_fastmap_destroy_checkmap(struct ubi_volume *vol);
+static inline void ubi_free_fastmap(struct ubi_device *ubi)
+{
+ if (ubi->fm) {
+ int i;
+
+ for (i = 0; i < ubi->fm->used_blocks; i++)
+ kmem_cache_free(ubi_wl_entry_slab, ubi->fm->e[i]);
+ kfree(ubi->fm);
+ ubi->fm = NULL;
+ }
+}
#else
static inline int ubi_update_fastmap(struct ubi_device *ubi) { return 0; }
static inline int ubi_fastmap_init_checkmap(struct ubi_volume *vol, int leb_count) { return 0; }
static inline void ubi_fastmap_destroy_checkmap(struct ubi_volume *vol) {}
+static inline void ubi_free_fastmap(struct ubi_device *ubi) { }
#endif
/* block.c */
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2] ubi: fastmap: fix ubi->fm memory leak
2025-11-07 10:00 [PATCH v2] ubi: fastmap: fix ubi->fm memory leak Liyuan Pang
@ 2025-11-07 12:13 ` Markus Elfring
[not found] ` <DF8B15D4-4819-47E6-9BB0-268AD0204C86@nod.at>
0 siblings, 1 reply; 4+ messages in thread
From: Markus Elfring @ 2025-11-07 12:13 UTC (permalink / raw)
To: Liyuan Pang, linux-mtd, linux-arm-kernel, linux-stm32
Cc: LKML, Alexandre Torgue, Maxime Coquelin, Miquel Raynal,
Richard Weinberger, Vignesh Raghavendra, wanqian10, Yang Liu,
Zhihao Cheng
> The problem is that scan_fast() allocate memory for ubi->fm
> and ubi->fm->e[x], but if the following attach process fails
…
You may occasionally put more than 60 characters into text lines
of such a change description.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v6.18-rc4#n658
Regards,
Markus
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [v2] ubi: fastmap: fix ubi->fm memory leak
[not found] ` <DF8B15D4-4819-47E6-9BB0-268AD0204C86@nod.at>
@ 2025-11-07 18:25 ` Markus Elfring
2025-11-07 19:23 ` Richard Weinberger
0 siblings, 1 reply; 4+ messages in thread
From: Markus Elfring @ 2025-11-07 18:25 UTC (permalink / raw)
To: Richard Weinberger, linux-mtd, linux-arm-kernel, linux-stm32
Cc: LKML, Alexandre Torgue, Maxime Coquelin, Miquel Raynal,
Vignesh Raghavendra, wanqian10, Yang Liu, Zhihao Cheng,
Liyuan Pang
> > You may occasionally put more than 60 characters into text lines
> > of such a change description.
> > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v6.18-rc4#n658
> Feel free to ignore everything Markus says.
Does your feedback indicate then also that Linux development process documentation may be overlooked any more?
Regards,
Markus
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [v2] ubi: fastmap: fix ubi->fm memory leak
2025-11-07 18:25 ` [v2] " Markus Elfring
@ 2025-11-07 19:23 ` Richard Weinberger
0 siblings, 0 replies; 4+ messages in thread
From: Richard Weinberger @ 2025-11-07 19:23 UTC (permalink / raw)
To: Markus Elfring
Cc: linux-mtd, linux-arm-kernel, linux-stm32, linux-kernel,
alexandre torgue, mcoquelin stm32, Miquel Raynal,
Vignesh Raghavendra, wanqian10, Yang Liu, chengzhihao1,
Liyuan Pang
----- Ursprüngliche Mail -----
> Von: "Markus Elfring" <Markus.Elfring@web.de>
>> > You may occasionally put more than 60 characters into text lines
>> > of such a change description.
>> > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v6.18-rc4#n658
>
>> Feel free to ignore everything Markus says.
>
> Does your feedback indicate then also that Linux development process
> documentation may be overlooked any more?
The only reason why you are not on my kill file is that I can protect newbies from you.
To quote GregKH[0]:
> Markus, you seem to have sent a nonsensical or otherwise pointless
> review comment to a patch submission on a Linux kernel developer mailing
> list. I strongly suggest that you not do this anymore. Please do not
> bother developers who are actively working to produce patches and
> features with comments that, in the end, are a waste of time.
> Patch submitter, please ignore Markus's suggestion; you do not need to
> follow it at all. The person/bot/AI that sent it is being ignored by
> almost all Linux kernel maintainers for having a persistent pattern of
> behavior of producing distracting and pointless commentary, and
> inability to adapt to feedback. Please feel free to also ignore emails
> from them.
Thanks,
//richard
[0] https://lore.kernel.org/lkml/2025110516-cubical-drowsily-7acd@gregkh/
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-11-07 19:23 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-07 10:00 [PATCH v2] ubi: fastmap: fix ubi->fm memory leak Liyuan Pang
2025-11-07 12:13 ` Markus Elfring
[not found] ` <DF8B15D4-4819-47E6-9BB0-268AD0204C86@nod.at>
2025-11-07 18:25 ` [v2] " Markus Elfring
2025-11-07 19:23 ` Richard Weinberger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox