]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/open.c
xen: Add support for preemption
[linux-2.6-omap-h63xx.git] / fs / open.c
index ca9981c4a658247bb6e29aaaaad8fa88f4d99dd8..be6a457f4226374b9d462cd8ee4332326ea22097 100644 (file)
--- 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);
@@ -852,7 +855,7 @@ EXPORT_SYMBOL(dentry_open);
 /*
  * Find an empty file descriptor entry, and mark it busy.
  */
-int get_unused_fd(void)
+int get_unused_fd_flags(int flags)
 {
        struct files_struct * files = current->files;
        int fd, error;
@@ -888,7 +891,10 @@ repeat:
        }
 
        FD_SET(fd, fdt->open_fds);
-       FD_CLR(fd, fdt->close_on_exec);
+       if (flags & O_CLOEXEC)
+               FD_SET(fd, fdt->close_on_exec);
+       else
+               FD_CLR(fd, fdt->close_on_exec);
        files->next_fd = fd + 1;
 #if 1
        /* Sanity check */
@@ -904,6 +910,11 @@ out:
        return error;
 }
 
+int get_unused_fd(void)
+{
+       return get_unused_fd_flags(0);
+}
+
 EXPORT_SYMBOL(get_unused_fd);
 
 static void __put_unused_fd(struct files_struct *files, unsigned int fd)
@@ -956,7 +967,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, int mode)
        int fd = PTR_ERR(tmp);
 
        if (!IS_ERR(tmp)) {
-               fd = get_unused_fd();
+               fd = get_unused_fd_flags(flags);
                if (fd >= 0) {
                        struct file *f = do_filp_open(dfd, tmp, flags, mode);
                        if (IS_ERR(f)) {