* [PATCH] configfs: fix slab-use-after-free in configfs_get_config_item()
@ 2026-07-30 9:25 Igor Putko
2026-07-30 14:20 ` Breno Leitao
2026-07-30 14:43 ` Igor Putko
0 siblings, 2 replies; 3+ messages in thread
From: Igor Putko @ 2026-07-30 9:25 UTC (permalink / raw)
To: Andreas Hindborg, Breno Leitao
Cc: linux-kernel, syzkaller-bugs, Igor Putko,
syzbot+6b16e3d085833cbf3e25
When configfs_symlink() resolves the target via get_target(), it uses
kern_path() which takes a reference on the target's dentry. If a
concurrent rmdir occurs, vfs_rmdir() calls dentry_unhash(). However,
because the dentry's refcount is > 1, dentry_unhash() bails out and
does not actually unhash it.
As a result, when configfs_symlink() subsequently calls
configfs_get_config_item(), it finds the dentry still hashed. It then
calls config_item_get() on sd->s_element. But since the concurrent rmdir
has already proceeded to detach and free the config_item, this leads to
a KASAN slab-use-after-free.
Fix this by taking configfs_dirent_lock inside configfs_get_config_item()
and checking if the CONFIGFS_USET_DROPPING flag is set before taking a
reference on the config_item.
Reported-by: syzbot+6b16e3d085833cbf3e25@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=6b16e3d085833cbf3e25
Fixes: 7051a3632669 ("configfs: Infrastructure for configfs items.")
Signed-off-by: Igor Putko <igorpetindev@gmail.com>
---
fs/configfs/configfs_internal.h | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/fs/configfs/configfs_internal.h b/fs/configfs/configfs_internal.h
index acdeea8e2..90d6c7515 100644
--- a/fs/configfs/configfs_internal.h
+++ b/fs/configfs/configfs_internal.h
@@ -119,12 +119,23 @@ static inline struct configfs_bin_attribute *to_bin_attr(struct dentry *dentry)
static inline struct config_item *configfs_get_config_item(struct dentry *dentry)
{
- struct config_item * item = NULL;
+ struct config_item *item = NULL;
spin_lock(&dentry->d_lock);
if (!d_unhashed(dentry)) {
- struct configfs_dirent * sd = dentry->d_fsdata;
- item = config_item_get(sd->s_element);
+ struct configfs_dirent *sd = dentry->d_fsdata;
+
+ if (sd) {
+ /*
+ * vfs_rmdir() keeps dentry in hash, if d_count > 1.
+ * Make sure to check the deletion flag while
+ * holding the lock.
+ */
+ spin_lock(&configfs_dirent_lock);
+ if (!(sd->s_type & CONFIGFS_USET_DROPPING))
+ item = config_item_get(sd->s_element);
+ spin_unlock(&configfs_dirent_lock);
+ }
}
spin_unlock(&dentry->d_lock);
--
2.47.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] configfs: fix slab-use-after-free in configfs_get_config_item()
2026-07-30 9:25 [PATCH] configfs: fix slab-use-after-free in configfs_get_config_item() Igor Putko
@ 2026-07-30 14:20 ` Breno Leitao
2026-07-30 14:43 ` Igor Putko
1 sibling, 0 replies; 3+ messages in thread
From: Breno Leitao @ 2026-07-30 14:20 UTC (permalink / raw)
To: Igor Putko
Cc: Andreas Hindborg, linux-kernel, syzkaller-bugs,
syzbot+6b16e3d085833cbf3e25
On Thu, Jul 30, 2026 at 12:25:02PM +0300, Igor Putko wrote:
> Fix this by taking configfs_dirent_lock inside configfs_get_config_item()
> and checking if the CONFIGFS_USET_DROPPING flag is set before taking a
> reference on the config_item.
How was this tested?
With this applied, a plain rmdir of any configfs item oopses, because
configfs_rmdir() itself calls this helper on the dentry it is removing,
after it has already set CONFIGFS_USET_DROPPING.
BUG: kernel NULL pointer dereference, address: 0000000000000040
RIP: 0010:configfs_rmdir+0x23d/0x3a0
Call Trace:
vfs_rmdir+0xbb/0x200
__x64_sys_rmdir+0x29/0x90
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] configfs: fix slab-use-after-free in configfs_get_config_item()
2026-07-30 9:25 [PATCH] configfs: fix slab-use-after-free in configfs_get_config_item() Igor Putko
2026-07-30 14:20 ` Breno Leitao
@ 2026-07-30 14:43 ` Igor Putko
1 sibling, 0 replies; 3+ messages in thread
From: Igor Putko @ 2026-07-30 14:43 UTC (permalink / raw)
To: Breno Leitao
Cc: Andreas Hindborg, linux-kernel, syzkaller-bugs,
syzbot+6b16e3d085833cbf3e25
Hi Breno,
I see that Vasileios Almpanis has posted a 2-patch series fixing this issue:
https://lore.kernel.org/all/20260730093435.195441-1-vasilisalmpanis@gmail.com/
Please disregard my patch.
Best regards,
Igor
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-07-30 14:43 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-30 9:25 [PATCH] configfs: fix slab-use-after-free in configfs_get_config_item() Igor Putko
2026-07-30 14:20 ` Breno Leitao
2026-07-30 14:43 ` Igor Putko
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.