[PATCH] mtd: core: fix possible resource leak in init_mtd()

Miquel Raynal miquel.raynal at bootlin.com
Mon Nov 7 08:20:20 PST 2022


On Mon, 2022-10-24 at 06:51:09 UTC, Gaosheng Cui wrote:
> I got the error report while inject fault in init_mtd():
> 
> sysfs: cannot create duplicate filename '/devices/virtual/bdi/mtd-0'
> Call Trace:
>  <TASK>
>  dump_stack_lvl+0x67/0x83
>  sysfs_warn_dup+0x60/0x70
>  sysfs_create_dir_ns+0x109/0x120
>  kobject_add_internal+0xce/0x2f0
>  kobject_add+0x98/0x110
>  device_add+0x179/0xc00
>  device_create_groups_vargs+0xf4/0x100
>  device_create+0x7b/0xb0
>  bdi_register_va.part.13+0x58/0x2d0
>  bdi_register+0x9b/0xb0
>  init_mtd+0x62/0x171 [mtd]
>  do_one_initcall+0x6c/0x3c0
>  do_init_module+0x58/0x222
>  load_module+0x268e/0x27d0
>  __do_sys_finit_module+0xd5/0x140
>  do_syscall_64+0x37/0x90
>  entry_SYSCALL_64_after_hwframe+0x63/0xcd
>  </TASK>
> kobject_add_internal failed for mtd-0 with -EEXIST, don't try to register
> 	things with the same name in the same directory.
> Error registering mtd class or bdi: -17
> 
> If init_mtdchar() fails in init_mtd(), mtd_bdi will not be unregistered,
> as a result, we can't load the mtd module again, to fix this by calling
> bdi_unregister(mtd_bdi) after out_procfs label.
> 
> Fixes: 445caaa20c4d ("mtd: Allocate bdi objects dynamically")
> Signed-off-by: Gaosheng Cui <cuigaosheng1 at huawei.com>

Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git mtd/next, thanks.

Miquel



More information about the linux-mtd mailing list