Patch "ubi: fastmap: Fix duplicate slab cache names while attaching" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ubi: fastmap: Fix duplicate slab cache names while attaching

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     ubi-fastmap-fix-duplicate-slab-cache-names-while-att.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 158f717d585ec253145d903c6488a212f19f2114
Author: Zhihao Cheng <chengzhihao1@xxxxxxxxxx>
Date:   Fri Oct 11 12:50:02 2024 +0800

    ubi: fastmap: Fix duplicate slab cache names while attaching
    
    [ Upstream commit bcddf52b7a17adcebc768d26f4e27cf79adb424c ]
    
    Since commit 4c39529663b9 ("slab: Warn on duplicate cache names when
    DEBUG_VM=y"), the duplicate slab cache names can be detected and a
    kernel WARNING is thrown out.
    In UBI fast attaching process, alloc_ai() could be invoked twice
    with the same slab cache name 'ubi_aeb_slab_cache', which will trigger
    following warning messages:
     kmem_cache of name 'ubi_aeb_slab_cache' already exists
     WARNING: CPU: 0 PID: 7519 at mm/slab_common.c:107
              __kmem_cache_create_args+0x100/0x5f0
     Modules linked in: ubi(+) nandsim [last unloaded: nandsim]
     CPU: 0 UID: 0 PID: 7519 Comm: modprobe Tainted: G 6.12.0-rc2
     RIP: 0010:__kmem_cache_create_args+0x100/0x5f0
     Call Trace:
       __kmem_cache_create_args+0x100/0x5f0
       alloc_ai+0x295/0x3f0 [ubi]
       ubi_attach+0x3c3/0xcc0 [ubi]
       ubi_attach_mtd_dev+0x17cf/0x3fa0 [ubi]
       ubi_init+0x3fb/0x800 [ubi]
       do_init_module+0x265/0x7d0
       __x64_sys_finit_module+0x7a/0xc0
    
    The problem could be easily reproduced by loading UBI device by fastmap
    with CONFIG_DEBUG_VM=y.
    Fix it by using different slab names for alloc_ai() callers.
    
    Fixes: d2158f69a7d4 ("UBI: Remove alloc_ai() slab name from parameter list")
    Fixes: fdf10ed710c0 ("ubi: Rework Fastmap attach base code")
    Signed-off-by: Zhihao Cheng <chengzhihao1@xxxxxxxxxx>
    Signed-off-by: Richard Weinberger <richard@xxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/mtd/ubi/attach.c b/drivers/mtd/ubi/attach.c
index ae5abe492b52a..adc47b87b38a5 100644
--- a/drivers/mtd/ubi/attach.c
+++ b/drivers/mtd/ubi/attach.c
@@ -1447,7 +1447,7 @@ static int scan_all(struct ubi_device *ubi, struct ubi_attach_info *ai,
 	return err;
 }
 
-static struct ubi_attach_info *alloc_ai(void)
+static struct ubi_attach_info *alloc_ai(const char *slab_name)
 {
 	struct ubi_attach_info *ai;
 
@@ -1461,7 +1461,7 @@ static struct ubi_attach_info *alloc_ai(void)
 	INIT_LIST_HEAD(&ai->alien);
 	INIT_LIST_HEAD(&ai->fastmap);
 	ai->volumes = RB_ROOT;
-	ai->aeb_slab_cache = kmem_cache_create("ubi_aeb_slab_cache",
+	ai->aeb_slab_cache = kmem_cache_create(slab_name,
 					       sizeof(struct ubi_ainf_peb),
 					       0, 0, NULL);
 	if (!ai->aeb_slab_cache) {
@@ -1491,7 +1491,7 @@ static int scan_fast(struct ubi_device *ubi, struct ubi_attach_info **ai)
 
 	err = -ENOMEM;
 
-	scan_ai = alloc_ai();
+	scan_ai = alloc_ai("ubi_aeb_slab_cache_fastmap");
 	if (!scan_ai)
 		goto out;
 
@@ -1557,7 +1557,7 @@ int ubi_attach(struct ubi_device *ubi, int force_scan)
 	int err;
 	struct ubi_attach_info *ai;
 
-	ai = alloc_ai();
+	ai = alloc_ai("ubi_aeb_slab_cache");
 	if (!ai)
 		return -ENOMEM;
 
@@ -1575,7 +1575,7 @@ int ubi_attach(struct ubi_device *ubi, int force_scan)
 		if (err > 0 || mtd_is_eccerr(err)) {
 			if (err != UBI_NO_FASTMAP) {
 				destroy_ai(ai);
-				ai = alloc_ai();
+				ai = alloc_ai("ubi_aeb_slab_cache");
 				if (!ai)
 					return -ENOMEM;
 
@@ -1614,7 +1614,7 @@ int ubi_attach(struct ubi_device *ubi, int force_scan)
 	if (ubi->fm && ubi_dbg_chk_fastmap(ubi)) {
 		struct ubi_attach_info *scan_ai;
 
-		scan_ai = alloc_ai();
+		scan_ai = alloc_ai("ubi_aeb_slab_cache_dbg_chk_fastmap");
 		if (!scan_ai) {
 			err = -ENOMEM;
 			goto out_wl;




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux