mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 13:11:40 +00:00
configfs fix for Linux 5.17
- fix a race in configfs_{,un}register_subsystem (ChenXiaoSong) -----BEGIN PGP SIGNATURE----- iQI/BAABCgApFiEEgdbnc3r/njty3Iq9D55TZVIEUYMFAmIZI84LHGhjaEBsc3Qu ZGUACgkQD55TZVIEUYP5tQ//e+8cjGVcu5cc6mciWFqkkDrdEiIsiI2OQriXBEbT PE7A+s5Hj5h9gtTQso3Q3L7UbPBvXH/xT2UytLzxNKOwr++jbh8Gd4Dc/bwJbOxR AH9Ybc6sOZjOh73jtrZAE7enVBFT55U4909YNaCbif3lKWEYnBo+wktltD7Mu23K s0IF8ch2shPBW6CB0XdXpEIhXRGqAEjr8mYydh4vAZCRPz5TSEpZrxylWRAml4nM mQIa0zVwEqPUlYW/BxbaKUn0MSqbWZBiXnM7pJChOReJ3HGioDW8oq+8nFNY9whF wRUKawH0E9KW0liQwhqGf6RdSAABwo/1c0PwbrjHONTCLgfLM/PtqEK1ER3VLn2+ 7Dn2WN0RUbHK0KrLeOt1Bn66fkrzd0JhbOjC7BAId2Pjgpvgro0Wh7mJPxANJ1Zf 8QCUTrG2POrYDANWrUmVXSPSLFK1T33GjXRj/nD0VdREa6yCFI6wzIBDC12LQB3b kZfAtlYwQcfMvvIZOdJeWMvjOL8W/jJy6QKbP3y9EbupJ1zTy656iSIK2sEVT1zO 2VAYh4cXegODntsuTtkMSRGCAXELM8luRrjWvvIEfNBqFU6yKdh9kt+p9Xe+U9JS KKb82zk/d+Mc4uis2yiUvGZy2ziU+AE8Z314KmMJgYQXV7P/GwNUHmBvpBIXyZPL 6OU= =1JKy -----END PGP SIGNATURE----- Merge tag 'configfs-5.17-2022-02-25' of git://git.infradead.org/users/hch/configfs Pull configfs fix from Christoph Hellwig: - fix a race in configfs_{,un}register_subsystem (ChenXiaoSong) * tag 'configfs-5.17-2022-02-25' of git://git.infradead.org/users/hch/configfs: configfs: fix a race in configfs_{,un}register_subsystem()
This commit is contained in:
commit
9137eda537
@ -34,6 +34,14 @@
|
||||
*/
|
||||
DEFINE_SPINLOCK(configfs_dirent_lock);
|
||||
|
||||
/*
|
||||
* All of link_obj/unlink_obj/link_group/unlink_group require that
|
||||
* subsys->su_mutex is held.
|
||||
* But parent configfs_subsystem is NULL when config_item is root.
|
||||
* Use this mutex when config_item is root.
|
||||
*/
|
||||
static DEFINE_MUTEX(configfs_subsystem_mutex);
|
||||
|
||||
static void configfs_d_iput(struct dentry * dentry,
|
||||
struct inode * inode)
|
||||
{
|
||||
@ -1859,7 +1867,9 @@ int configfs_register_subsystem(struct configfs_subsystem *subsys)
|
||||
group->cg_item.ci_name = group->cg_item.ci_namebuf;
|
||||
|
||||
sd = root->d_fsdata;
|
||||
mutex_lock(&configfs_subsystem_mutex);
|
||||
link_group(to_config_group(sd->s_element), group);
|
||||
mutex_unlock(&configfs_subsystem_mutex);
|
||||
|
||||
inode_lock_nested(d_inode(root), I_MUTEX_PARENT);
|
||||
|
||||
@ -1884,7 +1894,9 @@ int configfs_register_subsystem(struct configfs_subsystem *subsys)
|
||||
inode_unlock(d_inode(root));
|
||||
|
||||
if (err) {
|
||||
mutex_lock(&configfs_subsystem_mutex);
|
||||
unlink_group(group);
|
||||
mutex_unlock(&configfs_subsystem_mutex);
|
||||
configfs_release_fs();
|
||||
}
|
||||
put_fragment(frag);
|
||||
@ -1931,7 +1943,9 @@ void configfs_unregister_subsystem(struct configfs_subsystem *subsys)
|
||||
|
||||
dput(dentry);
|
||||
|
||||
mutex_lock(&configfs_subsystem_mutex);
|
||||
unlink_group(group);
|
||||
mutex_unlock(&configfs_subsystem_mutex);
|
||||
configfs_release_fs();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user