|
@@ -378,12 +378,13 @@ static int test_perm(int mode, int op)
|
|
|
return -EACCES;
|
|
|
}
|
|
|
|
|
|
-static int sysctl_perm(struct ctl_table_root *root, struct ctl_table *table, int op)
|
|
|
+static int sysctl_perm(struct ctl_table_header *head, struct ctl_table *table, int op)
|
|
|
{
|
|
|
+ struct ctl_table_root *root = head->root;
|
|
|
int mode;
|
|
|
|
|
|
if (root->permissions)
|
|
|
- mode = root->permissions(root, current->nsproxy, table);
|
|
|
+ mode = root->permissions(head, table);
|
|
|
else
|
|
|
mode = table->mode;
|
|
|
|
|
@@ -491,7 +492,7 @@ static ssize_t proc_sys_call_handler(struct file *filp, void __user *buf,
|
|
|
* and won't be until we finish.
|
|
|
*/
|
|
|
error = -EPERM;
|
|
|
- if (sysctl_perm(head->root, table, write ? MAY_WRITE : MAY_READ))
|
|
|
+ if (sysctl_perm(head, table, write ? MAY_WRITE : MAY_READ))
|
|
|
goto out;
|
|
|
|
|
|
/* if that can happen at all, it should be -EINVAL, not -EISDIR */
|
|
@@ -717,7 +718,7 @@ static int proc_sys_permission(struct inode *inode, int mask)
|
|
|
if (!table) /* global root - r-xr-xr-x */
|
|
|
error = mask & MAY_WRITE ? -EACCES : 0;
|
|
|
else /* Use the permissions on the sysctl table entry */
|
|
|
- error = sysctl_perm(head->root, table, mask & ~MAY_NOT_BLOCK);
|
|
|
+ error = sysctl_perm(head, table, mask & ~MAY_NOT_BLOCK);
|
|
|
|
|
|
sysctl_head_finish(head);
|
|
|
return error;
|