Description
In the Linux kernel, the following vulnerability has been resolved: configfs: pin the symlink target's dirent instead of chasing ->ci_dentry create_link() reads the target's configfs_dirent from item->ci_dentry->d_fsdata, relying on the item reference taken by get_target(). That reference pins the item, not its dentry: the dentry is pinned by DCACHE_PERSISTENT, which configfs_remove_dir() releases via simple_rmdir() while the item is still alive. A symlink racing with rmdir of its target can therefore find ->ci_dentry freed and its dirent released, triggering WARN_ON(!atomic_read(&sd->s_count)) in configfs_get(). Take the dirent in get_target() as well, under ->d_lock and atomically with the item reference, and pass it down to create_link(). A hashed dentry has not been killed yet, so its ->d_fsdata reference keeps the dirent alive there.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
7063fbf2261194f72ee75afca67b3b38b554b5fa to < a44744454eafbc158e8c8e3ef8d207076410b195affected7063fbf2261194f72ee75afca67b3b38b554b5fa to < 846ff40fd57a47e59a41f4e331ec3b34efaddc23affected7063fbf2261194f72ee75afca67b3b38b554b5fa to < 4f54beb2e7f6d399396466682fba3539bcdcb414affected7063fbf2261194f72ee75afca67b3b38b554b5fa to < d47c5de1cd6bfbe1067fc310bf90e4e00205e839affected7063fbf2261194f72ee75afca67b3b38b554b5fa to < a7c1290eef60711c10289c056ad32ed1f2b47b12affected
Linux Linux
Default version status: affected
2.6.16affected0 to < 2.6.16unaffected6.6.160 to ≤ 6.6.*unaffected6.12.112 to ≤ 6.12.*unaffected6.18.53 to ≤ 6.18.*unaffected7.2.7 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/a44744454eafbc158e8c8e3ef8d207076410b195 ↗
- https://git.kernel.org/stable/c/846ff40fd57a47e59a41f4e331ec3b34efaddc23 ↗
- https://git.kernel.org/stable/c/4f54beb2e7f6d399396466682fba3539bcdcb414 ↗
- https://git.kernel.org/stable/c/d47c5de1cd6bfbe1067fc310bf90e4e00205e839 ↗
- https://git.kernel.org/stable/c/a7c1290eef60711c10289c056ad32ed1f2b47b12 ↗