aboutsummaryrefslogtreecommitdiff
path: root/fs/ubifs/super.c
diff options
context:
space:
mode:
authorGravatar Zhihao Cheng <chengzhihao1@huawei.com> 2021-05-31 20:52:09 +0800
committerGravatar Richard Weinberger <richard@nod.at> 2021-06-18 22:04:47 +0200
commitf4e3634a3b642225a530c292fdb1e8a4007507f5 (patch)
tree3aeb9658f4ab13f138415ee881d66af842cfec32 /fs/ubifs/super.c
parentubifs: fix snprintf() checking (diff)
downloadlinux-f4e3634a3b642225a530c292fdb1e8a4007507f5.tar.gz
linux-f4e3634a3b642225a530c292fdb1e8a4007507f5.tar.bz2
linux-f4e3634a3b642225a530c292fdb1e8a4007507f5.zip
ubifs: Fix races between xattr_{set|get} and listxattr operations
UBIFS may occur some problems with concurrent xattr_{set|get} and listxattr operations, such as assertion failure, memory corruption, stale xattr value[1]. Fix it by importing a new rw-lock in @ubifs_inode to serilize write operations on xattr, concurrent read operations are still effective, just like ext4. [1] https://lore.kernel.org/linux-mtd/20200630130438.141649-1-houtao1@huawei.com Fixes: 1e51764a3c2ac05a23 ("UBIFS: add new flash file system") Cc: stable@vger.kernel.org # v2.6+ Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com> Reviewed-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'fs/ubifs/super.c')
-rw-r--r--fs/ubifs/super.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
index 7b572e1414ba..e279a069a26b 100644
--- a/fs/ubifs/super.c
+++ b/fs/ubifs/super.c
@@ -275,6 +275,7 @@ static struct inode *ubifs_alloc_inode(struct super_block *sb)
memset((void *)ui + sizeof(struct inode), 0,
sizeof(struct ubifs_inode) - sizeof(struct inode));
mutex_init(&ui->ui_mutex);
+ init_rwsem(&ui->xattr_sem);
spin_lock_init(&ui->ui_lock);
return &ui->vfs_inode;
};