Commit ae2bb293 authored by Al Viro's avatar Al Viro
Browse files

get rid of cred argument of vfs_open() and do_dentry_open()



always equal to ->f_cred

Acked-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent ea73ea72
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -126,7 +126,7 @@ int do_fchownat(int dfd, const char __user *filename, uid_t user, gid_t group,
		int flag);
		int flag);


extern int open_check_o_direct(struct file *f);
extern int open_check_o_direct(struct file *f);
extern int vfs_open(const struct path *, struct file *, const struct cred *);
extern int vfs_open(const struct path *, struct file *);


/*
/*
 * inode.c
 * inode.c
+2 −2
Original line number Original line Diff line number Diff line
@@ -3396,7 +3396,7 @@ static int do_last(struct nameidata *nd,
	if (error)
	if (error)
		goto out;
		goto out;
	BUG_ON(*opened & FILE_OPENED); /* once it's opened, it's opened */
	BUG_ON(*opened & FILE_OPENED); /* once it's opened, it's opened */
	error = vfs_open(&nd->path, file, current_cred());
	error = vfs_open(&nd->path, file);
	if (error)
	if (error)
		goto out;
		goto out;
	*opened |= FILE_OPENED;
	*opened |= FILE_OPENED;
@@ -3499,7 +3499,7 @@ static int do_o_path(struct nameidata *nd, unsigned flags, struct file *file)
	int error = path_lookupat(nd, flags, &path);
	int error = path_lookupat(nd, flags, &path);
	if (!error) {
	if (!error) {
		audit_inode(nd->name, path.dentry, 0);
		audit_inode(nd->name, path.dentry, 0);
		error = vfs_open(&path, file, current_cred());
		error = vfs_open(&path, file);
		path_put(&path);
		path_put(&path);
	}
	}
	return error;
	return error;
+6 −9
Original line number Original line Diff line number Diff line
@@ -736,8 +736,7 @@ int open_check_o_direct(struct file *f)


static int do_dentry_open(struct file *f,
static int do_dentry_open(struct file *f,
			  struct inode *inode,
			  struct inode *inode,
			  int (*open)(struct inode *, struct file *),
			  int (*open)(struct inode *, struct file *))
			  const struct cred *cred)
{
{
	static const struct file_operations empty_fops = {};
	static const struct file_operations empty_fops = {};
	int error;
	int error;
@@ -777,7 +776,7 @@ static int do_dentry_open(struct file *f,
		goto cleanup_all;
		goto cleanup_all;
	}
	}


	error = security_file_open(f, cred);
	error = security_file_open(f, f->f_cred);
	if (error)
	if (error)
		goto cleanup_all;
		goto cleanup_all;


@@ -855,8 +854,7 @@ int finish_open(struct file *file, struct dentry *dentry,
	BUG_ON(*opened & FILE_OPENED); /* once it's opened, it's opened */
	BUG_ON(*opened & FILE_OPENED); /* once it's opened, it's opened */


	file->f_path.dentry = dentry;
	file->f_path.dentry = dentry;
	error = do_dentry_open(file, d_backing_inode(dentry), open,
	error = do_dentry_open(file, d_backing_inode(dentry), open);
			       current_cred());
	if (!error)
	if (!error)
		*opened |= FILE_OPENED;
		*opened |= FILE_OPENED;


@@ -897,8 +895,7 @@ EXPORT_SYMBOL(file_path);
 * @file: newly allocated file with f_flag initialized
 * @file: newly allocated file with f_flag initialized
 * @cred: credentials to use
 * @cred: credentials to use
 */
 */
int vfs_open(const struct path *path, struct file *file,
int vfs_open(const struct path *path, struct file *file)
	     const struct cred *cred)
{
{
	struct dentry *dentry = d_real(path->dentry, NULL, file->f_flags, 0);
	struct dentry *dentry = d_real(path->dentry, NULL, file->f_flags, 0);


@@ -906,7 +903,7 @@ int vfs_open(const struct path *path, struct file *file,
		return PTR_ERR(dentry);
		return PTR_ERR(dentry);


	file->f_path = *path;
	file->f_path = *path;
	return do_dentry_open(file, d_backing_inode(dentry), NULL, cred);
	return do_dentry_open(file, d_backing_inode(dentry), NULL);
}
}


struct file *dentry_open(const struct path *path, int flags,
struct file *dentry_open(const struct path *path, int flags,
@@ -922,7 +919,7 @@ struct file *dentry_open(const struct path *path, int flags,


	f = alloc_empty_file(flags, cred);
	f = alloc_empty_file(flags, cred);
	if (!IS_ERR(f)) {
	if (!IS_ERR(f)) {
		error = vfs_open(path, f, cred);
		error = vfs_open(path, f);
		if (!error) {
		if (!error) {
			/* from now on we need fput() to dispose of f */
			/* from now on we need fput() to dispose of f */
			error = open_check_o_direct(f);
			error = open_check_o_direct(f);