summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-08 20:10:00 -0700
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-08 20:10:00 -0700
commit7b82dc0e64e93f430182f36b46b79fcee87d3532 (patch)
tree28c61be85dd899cdb096ac15c65b521b0db60ea8
parent1efd48b3ae8f89a1d04f1e36be96764d7bf43ae9 (diff)
Remove suid/sgid bits on [f]truncate()
.. to match what we do on write(). This way, people who write to files by using [f]truncate + writable mmap have the same semantics as if they were using the write() family of system calls. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--fs/open.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/open.c b/fs/open.c
index ca9981c4a65..0d515d16197 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -210,6 +210,9 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
newattrs.ia_valid |= ATTR_FILE;
}
+ /* Remove suid/sgid on truncate too */
+ newattrs.ia_valid |= should_remove_suid(dentry);
+
mutex_lock(&dentry->d_inode->i_mutex);
err = notify_change(dentry, &newattrs);
mutex_unlock(&dentry->d_inode->i_mutex);