fs: provide rcu-walk aware permission i_ops
Signed-off-by: Nick Piggin <npiggin@kernel.dk>
This commit is contained in:
@@ -2114,11 +2114,13 @@ static const struct file_operations proc_fd_operations = {
|
||||
* /proc/pid/fd needs a special permission handler so that a process can still
|
||||
* access /proc/self/fd after it has executed a setuid().
|
||||
*/
|
||||
static int proc_fd_permission(struct inode *inode, int mask)
|
||||
static int proc_fd_permission(struct inode *inode, int mask, unsigned int flags)
|
||||
{
|
||||
int rv;
|
||||
|
||||
rv = generic_permission(inode, mask, NULL);
|
||||
if (flags & IPERM_FLAG_RCU)
|
||||
return -ECHILD;
|
||||
rv = generic_permission(inode, mask, flags, NULL);
|
||||
if (rv == 0)
|
||||
return 0;
|
||||
if (task_pid(current) == proc_pid(inode))
|
||||
|
@@ -295,7 +295,7 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int proc_sys_permission(struct inode *inode, int mask)
|
||||
static int proc_sys_permission(struct inode *inode, int mask,unsigned int flags)
|
||||
{
|
||||
/*
|
||||
* sysctl entries that are not writeable,
|
||||
@@ -305,6 +305,9 @@ static int proc_sys_permission(struct inode *inode, int mask)
|
||||
struct ctl_table *table;
|
||||
int error;
|
||||
|
||||
if (flags & IPERM_FLAG_RCU)
|
||||
return -ECHILD;
|
||||
|
||||
/* Executable files are not allowed under /proc/sys/ */
|
||||
if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode))
|
||||
return -EACCES;
|
||||
|
Reference in New Issue
Block a user