Re: [PATCH 2/2] configfs: unhash the dentry before dropping the item in rmdir

Breno Leitao <[email protected]>
Newsgroups gmane.linux.kernel.stable,gmane.linux.file-systems,gmane.linux.kernel
Message-ID <[email protected]>
On Thu, Jul 30, 2026 at 11:30:25AM +0200, Vasileios Almpanis wrote:
> 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.

Is the claim that "a reference obtained just before that stays harmless,
as create_link() rechecks CONFIGFS_USET_DROPPING" accurate?
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.