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

Commit 9ac9b847 authored by Dave Hansen's avatar Dave Hansen Committed by Al Viro
Browse files

[PATCH] r/o bind mounts: write counts for truncate()

parent 2af482a7
Loading
Loading
Loading
Loading
+8 −6
Original line number Original line Diff line number Diff line
@@ -244,21 +244,21 @@ static long do_sys_truncate(const char __user * path, loff_t length)
	if (!S_ISREG(inode->i_mode))
	if (!S_ISREG(inode->i_mode))
		goto dput_and_out;
		goto dput_and_out;


	error = vfs_permission(&nd, MAY_WRITE);
	error = mnt_want_write(nd.path.mnt);
	if (error)
	if (error)
		goto dput_and_out;
		goto dput_and_out;


	error = -EROFS;
	error = vfs_permission(&nd, MAY_WRITE);
	if (IS_RDONLY(inode))
	if (error)
		goto dput_and_out;
		goto mnt_drop_write_and_out;


	error = -EPERM;
	error = -EPERM;
	if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
	if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
		goto dput_and_out;
		goto mnt_drop_write_and_out;


	error = get_write_access(inode);
	error = get_write_access(inode);
	if (error)
	if (error)
		goto dput_and_out;
		goto mnt_drop_write_and_out;


	/*
	/*
	 * Make sure that there are no leases.  get_write_access() protects
	 * Make sure that there are no leases.  get_write_access() protects
@@ -276,6 +276,8 @@ static long do_sys_truncate(const char __user * path, loff_t length)


put_write_and_out:
put_write_and_out:
	put_write_access(inode);
	put_write_access(inode);
mnt_drop_write_and_out:
	mnt_drop_write(nd.path.mnt);
dput_and_out:
dput_and_out:
	path_put(&nd.path);
	path_put(&nd.path);
out:
out: