CVE-2022-50751 in Linux
摘要
由 VulDB • 2026-05-30
在 Linux 内核中,已修复以下漏洞:
configfs:修复 configfs_create_dir() 中可能存在的内存泄漏
kmemleak 报告 configfs_create_dir() 中存在内存泄漏:
未引用对象 0xffff888009f6af00(大小 192): 命令 "modprobe",进程 ID 3777,jiffies 4295537735(年龄 233.784 秒) 回溯: kmem_cache_alloc (mm/slub.c:3250 mm/slub.c:3256 mm/slub.c:3263 mm/slub.c:3273) new_fragment (./include/linux/slab.h:600 fs/configfs/dir.c:163) configfs_register_subsystem (fs/configfs/dir.c:1857) basic_write (drivers/hwtracing/stm/p_basic.c:14) stm_p_basic do_one_initcall (init/main.c:1296) do_init_module (kernel/module/main.c:2455) ...
未引用对象 0xffff888003ba7180(大小 96): 命令 "modprobe",进程 ID 3777,jiffies 4295537735(年龄 233.784 秒) 回溯: kmem_cache_alloc (mm/slub.c:3250 mm/slub.c:3256 mm/slub.c:3263 mm/slub.c:3273) configfs_new_dirent (./include/linux/slab.h:723 fs/configfs/dir.c:194) configfs_make_dirent (fs/configfs/dir.c:248) configfs_create_dir (fs/configfs/dir.c:296) configfs_attach_group.isra.28 (fs/configfs/dir.c:816 fs/configfs/dir.c:852) configfs_register_subsystem (fs/configfs/dir.c:1881) basic_write (drivers/hwtracing/stm/p_basic.c:14) stm_p_basic do_one_initcall (init/main.c:1296) do_init_module (kernel/module/main.c:2455) ...
这是因为 configfs_make_dirent() 中的引用计数不正确。 在正常流程中,引用计数的变化如下:
configfs_register_subsystem() configfs_create_dir() configfs_make_dirent() configfs_new_dirent() # 设置 s_count = 1 dentry->d_fsdata = configfs_get(sd); # s_count = 2 ... configfs_unregister_subsystem() configfs_remove_dir() remove_dir() configfs_remove_dirent() # s_count = 1 dput() ... *dentry_unlink_inode()* configfs_d_iput() # s_count = 0,释放
然而,如果在 configfs_create() 中失败:
configfs_register_subsystem() configfs_create_dir() configfs_make_dirent() # s_count = 2 ... configfs_create() # 失败 ->out_remove: configfs_remove_dirent(dentry) configfs_put(sd) # s_count = 1 return PTR_ERR(inode);
在错误路径中没有 inode,因此丢失了 configfs_d_iput(),导致 sd 和 fragment 内存泄漏。
为修复此问题,当在 configfs_create() 中失败时,手动调用 configfs_put(sd) 以保持引用计数正确。
If you want to get best quality of vulnerability data, you may have to visit VulDB.