Linux: configfs: unhash the dentry before dropping the item in rmdir
What fixes it
- 446720051d44eebaa81b33969173160057b73a33LinuxCVE List
- 5d7cbfb65e47cc71d5d94d87d5d0d1679080f3ebLinuxCVE List
- 925d8564f1b2d9b46c5ab63b9bc942cea006da9bLinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
configfs: unhash the dentry before dropping the item in rmdir
configfs_get_config_item() treats a hashed dentry as proof that sd->s_element is a live config_item. configfs_rmdir() breaks that: simple_rmdir() leaves the dentry hashed, the last reference to the item is dropped right after, and the dentry is only unhashed by d_delete() once ->rmdir() has returned. configfs_symlink() resolves its target holding no lock on it, so get_target() can land in that window:
BUG: KASAN: slab-use-after-free in config_item_get+0x26/0x90 get_target fs/configfs/symlink.c:128 [inline] configfs_symlink+0x4ab/0x1030 fs/configfs/symlink.c:185
Unhash in configfs_remove_dir(), while the item is still guaranteed to be there. A reference obtained just before that stays harmless, as create_link() rechecks CONFIGFS_USET_DROPPING, already set by configfs_detach_prep(). Both configfs_unregister_subsystem() paths d_drop() after detaching, so this only makes rmdir match them.
Text from CVE List
Affected versions 12
- Linuxaffected: 7063fbf2261194f72ee75afca67b3b38b554b5fa before b315d865660766d45ecdbf7433a4e3d36a554b3bCVE List
- Linuxaffected: 7063fbf2261194f72ee75afca67b3b38b554b5fa before 446720051d44eebaa81b33969173160057b73a33CVE List
- Linuxaffected: 7063fbf2261194f72ee75afca67b3b38b554b5fa before 5d7cbfb65e47cc71d5d94d87d5d0d1679080f3ebCVE List
- Linuxaffected: 7063fbf2261194f72ee75afca67b3b38b554b5fa before 925d8564f1b2d9b46c5ab63b9bc942cea006da9bCVE List
- Linuxaffected: 7063fbf2261194f72ee75afca67b3b38b554b5fa before f06c2d26d1999d37e93299db0ecead04ca7d0b9fCVE List
- Linuxaffected: 2.6.16CVE List
- Linuxunaffected: all versions before 2.6.16CVE List
- Linuxunaffected: 6.6.160 through 6.6.*CVE List
- Linuxunaffected: 6.12.112 through 6.12.*CVE List
- Linuxunaffected: 6.18.53 through 6.18.*CVE List
- Linuxunaffected: 7.2.7 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 5
- git.kernel.org/stable/c/b315d865660766d45ecdbf7433a4e3d36a554b3bReferencevia CVE List
- git.kernel.org/stable/c/446720051d44eebaa81b33969173160057b73a33Referencevia CVE List
- git.kernel.org/stable/c/5d7cbfb65e47cc71d5d94d87d5d0d1679080f3ebReferencevia CVE List
- git.kernel.org/stable/c/925d8564f1b2d9b46c5ab63b9bc942cea006da9bReferencevia CVE List
- git.kernel.org/stable/c/f06c2d26d1999d37e93299db0ecead04ca7d0b9fReferencevia CVE List