projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
and changed files
[powerpc.git]
/
fs
/
open.c
diff --git
a/fs/open.c
b/fs/open.c
index
89e0c23
..
0d515d1
100644
(file)
--- a/
fs/open.c
+++ b/
fs/open.c
@@
-7,7
+7,6
@@
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/file.h>
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/file.h>
-#include <linux/smp_lock.h>
#include <linux/quotaops.h>
#include <linux/fsnotify.h>
#include <linux/module.h>
#include <linux/quotaops.h>
#include <linux/fsnotify.h>
#include <linux/module.h>
@@
-165,7
+164,7
@@
asmlinkage long sys_fstatfs(unsigned int fd, struct statfs __user * buf)
file = fget(fd);
if (!file)
goto out;
file = fget(fd);
if (!file)
goto out;
- error = vfs_statfs_native(file->f_dentry, &tmp);
+ error = vfs_statfs_native(file->f_
path.
dentry, &tmp);
if (!error && copy_to_user(buf, &tmp, sizeof(tmp)))
error = -EFAULT;
fput(file);
if (!error && copy_to_user(buf, &tmp, sizeof(tmp)))
error = -EFAULT;
fput(file);
@@
-186,7
+185,7
@@
asmlinkage long sys_fstatfs64(unsigned int fd, size_t sz, struct statfs64 __user
file = fget(fd);
if (!file)
goto out;
file = fget(fd);
if (!file)
goto out;
- error = vfs_statfs64(file->f_dentry, &tmp);
+ error = vfs_statfs64(file->f_
path.
dentry, &tmp);
if (!error && copy_to_user(buf, &tmp, sizeof(tmp)))
error = -EFAULT;
fput(file);
if (!error && copy_to_user(buf, &tmp, sizeof(tmp)))
error = -EFAULT;
fput(file);
@@
-211,6
+210,9
@@
int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
newattrs.ia_valid |= ATTR_FILE;
}
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);
mutex_lock(&dentry->d_inode->i_mutex);
err = notify_change(dentry, &newattrs);
mutex_unlock(&dentry->d_inode->i_mutex);
@@
-302,7
+304,7
@@
static long do_sys_ftruncate(unsigned int fd, loff_t length, int small)
if (file->f_flags & O_LARGEFILE)
small = 0;
if (file->f_flags & O_LARGEFILE)
small = 0;
- dentry = file->f_dentry;
+ dentry = file->f_
path.
dentry;
inode = dentry->d_inode;
error = -EINVAL;
if (!S_ISREG(inode->i_mode) || !(file->f_mode & FMODE_WRITE))
inode = dentry->d_inode;
error = -EINVAL;
if (!S_ISREG(inode->i_mode) || !(file->f_mode & FMODE_WRITE))
@@
-448,8
+450,8
@@
asmlinkage long sys_fchdir(unsigned int fd)
if (!file)
goto out;
if (!file)
goto out;
- dentry = file->f_dentry;
- mnt = file->f_
vfs
mnt;
+ dentry = file->f_
path.
dentry;
+ mnt = file->f_
path.
mnt;
inode = dentry->d_inode;
error = -ENOTDIR;
inode = dentry->d_inode;
error = -ENOTDIR;
@@
-503,7
+505,7
@@
asmlinkage long sys_fchmod(unsigned int fd, mode_t mode)
if (!file)
goto out;
if (!file)
goto out;
- dentry = file->f_dentry;
+ dentry = file->f_
path.
dentry;
inode = dentry->d_inode;
audit_inode(NULL, inode);
inode = dentry->d_inode;
audit_inode(NULL, inode);
@@
-662,7
+664,7
@@
asmlinkage long sys_fchown(unsigned int fd, uid_t user, gid_t group)
if (!file)
goto out;
if (!file)
goto out;
- dentry = file->f_dentry;
+ dentry = file->f_
path.
dentry;
audit_inode(NULL, dentry->d_inode);
error = chown_common(dentry, user, group);
fput(file);
audit_inode(NULL, dentry->d_inode);
error = chown_common(dentry, user, group);
fput(file);
@@
-688,8
+690,8
@@
static struct file *__dentry_open(struct dentry *dentry, struct vfsmount *mnt,
}
f->f_mapping = inode->i_mapping;
}
f->f_mapping = inode->i_mapping;
- f->f_dentry = dentry;
- f->f_
vfs
mnt = mnt;
+ f->f_
path.
dentry = dentry;
+ f->f_
path.
mnt = mnt;
f->f_pos = 0;
f->f_op = fops_get(inode->i_fop);
file_move(f, &inode->i_sb->s_files);
f->f_pos = 0;
f->f_op = fops_get(inode->i_fop);
file_move(f, &inode->i_sb->s_files);
@@
-723,8
+725,8
@@
cleanup_all:
if (f->f_mode & FMODE_WRITE)
put_write_access(inode);
file_kill(f);
if (f->f_mode & FMODE_WRITE)
put_write_access(inode);
file_kill(f);
- f->f_dentry = NULL;
- f->f_
vfs
mnt = NULL;
+ f->f_
path.
dentry = NULL;
+ f->f_
path.
mnt = NULL;
cleanup_file:
put_filp(f);
dput(dentry);
cleanup_file:
put_filp(f);
dput(dentry);
@@
-822,7
+824,7
@@
struct file *nameidata_to_filp(struct nameidata *nd, int flags)
/* Pick up the filp from the open intent */
filp = nd->intent.open.file;
/* Has the filesystem initialised the file for us? */
/* Pick up the filp from the open intent */
filp = nd->intent.open.file;
/* Has the filesystem initialised the file for us? */
- if (filp->f_dentry == NULL)
+ if (filp->f_
path.
dentry == NULL)
filp = __dentry_open(nd->dentry, nd->mnt, flags, filp, NULL);
else
path_release(nd);
filp = __dentry_open(nd->dentry, nd->mnt, flags, filp, NULL);
else
path_release(nd);
@@
-864,8
+866,7
@@
int get_unused_fd(void)
repeat:
fdt = files_fdtable(files);
repeat:
fdt = files_fdtable(files);
- fd = find_next_zero_bit(fdt->open_fds->fds_bits,
- fdt->max_fdset,
+ fd = find_next_zero_bit(fdt->open_fds->fds_bits, fdt->max_fds,
files->next_fd);
/*
files->next_fd);
/*
@@
-965,7
+966,7
@@
long do_sys_open(int dfd, const char __user *filename, int flags, int mode)
put_unused_fd(fd);
fd = PTR_ERR(f);
} else {
put_unused_fd(fd);
fd = PTR_ERR(f);
} else {
- fsnotify_open(f->f_dentry);
+ fsnotify_open(f->f_
path.
dentry);
fd_install(fd, f);
}
}
fd_install(fd, f);
}
}
@@
-1087,6
+1088,7
@@
EXPORT_SYMBOL(sys_close);
asmlinkage long sys_vhangup(void)
{
if (capable(CAP_SYS_TTY_CONFIG)) {
asmlinkage long sys_vhangup(void)
{
if (capable(CAP_SYS_TTY_CONFIG)) {
+ /* XXX: this needs locking */
tty_vhangup(current->signal->tty);
return 0;
}
tty_vhangup(current->signal->tty);
return 0;
}