Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 422138dd authored by Dmitry Bazhenov's avatar Dmitry Bazhenov Committed by David Woodhouse
Browse files

[JFFS2] Fix race in setting file attributes



It seems like there is a potential race in the function jffs2_do_setattr()
in the case when attributes of a symlink are updated. The symlink metadata
is read without having f->sem locked.

The following patch should fix the race.

Signed-off-by: default avatarDmitry Bazhenov <atrey@emcraft.com>
Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
parent edc4ff7c
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -56,15 +56,20 @@ static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr)
		mdatalen = sizeof(dev);
		D1(printk(KERN_DEBUG "jffs2_setattr(): Writing %d bytes of kdev_t\n", mdatalen));
	} else if (S_ISLNK(inode->i_mode)) {
		down(&f->sem);
		mdatalen = f->metadata->size;
		mdata = kmalloc(f->metadata->size, GFP_USER);
		if (!mdata)
		if (!mdata) {
			up(&f->sem);
			return -ENOMEM;
		}
		ret = jffs2_read_dnode(c, f, f->metadata, mdata, 0, mdatalen);
		if (ret) {
			up(&f->sem);
			kfree(mdata);
			return ret;
		}
		up(&f->sem);
		D1(printk(KERN_DEBUG "jffs2_setattr(): Writing %d bytes of symlink target\n", mdatalen));
	}