diff options
Diffstat (limited to 'kernel/sysctl_binary.c')
| -rw-r--r-- | kernel/sysctl_binary.c | 19 | 
1 files changed, 1 insertions, 18 deletions
| diff --git a/kernel/sysctl_binary.c b/kernel/sysctl_binary.c index b875bedf7c9..3b8e028b960 100644 --- a/kernel/sysctl_binary.c +++ b/kernel/sysctl_binary.c @@ -1321,13 +1321,11 @@ static ssize_t binary_sysctl(const int *name, int nlen,  	void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)  {  	const struct bin_table *table = NULL; -	struct nameidata nd;  	struct vfsmount *mnt;  	struct file *file;  	ssize_t result;  	char *pathname;  	int flags; -	int acc_mode;  	pathname = sysctl_getname(name, nlen, &table);  	result = PTR_ERR(pathname); @@ -1337,28 +1335,17 @@ static ssize_t binary_sysctl(const int *name, int nlen,  	/* How should the sysctl be accessed? */  	if (oldval && oldlen && newval && newlen) {  		flags = O_RDWR; -		acc_mode = MAY_READ | MAY_WRITE;  	} else if (newval && newlen) {  		flags = O_WRONLY; -		acc_mode = MAY_WRITE;  	} else if (oldval && oldlen) {  		flags = O_RDONLY; -		acc_mode = MAY_READ;  	} else {  		result = 0;  		goto out_putname;  	}  	mnt = current->nsproxy->pid_ns->proc_mnt; -	result = vfs_path_lookup(mnt->mnt_root, mnt, pathname, 0, &nd); -	if (result) -		goto out_putname; - -	result = may_open(&nd.path, acc_mode, flags); -	if (result) -		goto out_putpath; - -	file = dentry_open(nd.path.dentry, nd.path.mnt, flags, current_cred()); +	file = file_open_root(mnt->mnt_root, mnt, pathname, flags);  	result = PTR_ERR(file);  	if (IS_ERR(file))  		goto out_putname; @@ -1370,10 +1357,6 @@ out_putname:  	putname(pathname);  out:  	return result; - -out_putpath: -	path_put(&nd.path); -	goto out_putname;  } | 
