|
@@ -228,9 +228,6 @@ static int acl_permission_check(struct inode *inode, int mask)
|
|
|
{
|
|
|
unsigned int mode = inode->i_mode;
|
|
|
|
|
|
- if (current_user_ns() != inode_userns(inode))
|
|
|
- goto other_perms;
|
|
|
-
|
|
|
if (likely(current_fsuid() == inode->i_uid))
|
|
|
mode >>= 6;
|
|
|
else {
|
|
@@ -244,7 +241,6 @@ static int acl_permission_check(struct inode *inode, int mask)
|
|
|
mode >>= 3;
|
|
|
}
|
|
|
|
|
|
-other_perms:
|
|
|
/*
|
|
|
* If the DACs are ok we don't need any capability check.
|
|
|
*/
|
|
@@ -280,10 +276,10 @@ int generic_permission(struct inode *inode, int mask)
|
|
|
|
|
|
if (S_ISDIR(inode->i_mode)) {
|
|
|
/* DACs are overridable for directories */
|
|
|
- if (ns_capable(inode_userns(inode), CAP_DAC_OVERRIDE))
|
|
|
+ if (inode_capable(inode, CAP_DAC_OVERRIDE))
|
|
|
return 0;
|
|
|
if (!(mask & MAY_WRITE))
|
|
|
- if (ns_capable(inode_userns(inode), CAP_DAC_READ_SEARCH))
|
|
|
+ if (inode_capable(inode, CAP_DAC_READ_SEARCH))
|
|
|
return 0;
|
|
|
return -EACCES;
|
|
|
}
|
|
@@ -293,7 +289,7 @@ int generic_permission(struct inode *inode, int mask)
|
|
|
* at least one exec bit set.
|
|
|
*/
|
|
|
if (!(mask & MAY_EXEC) || (inode->i_mode & S_IXUGO))
|
|
|
- if (ns_capable(inode_userns(inode), CAP_DAC_OVERRIDE))
|
|
|
+ if (inode_capable(inode, CAP_DAC_OVERRIDE))
|
|
|
return 0;
|
|
|
|
|
|
/*
|
|
@@ -301,7 +297,7 @@ int generic_permission(struct inode *inode, int mask)
|
|
|
*/
|
|
|
mask &= MAY_READ | MAY_WRITE | MAY_EXEC;
|
|
|
if (mask == MAY_READ)
|
|
|
- if (ns_capable(inode_userns(inode), CAP_DAC_READ_SEARCH))
|
|
|
+ if (inode_capable(inode, CAP_DAC_READ_SEARCH))
|
|
|
return 0;
|
|
|
|
|
|
return -EACCES;
|
|
@@ -1964,15 +1960,11 @@ static inline int check_sticky(struct inode *dir, struct inode *inode)
|
|
|
|
|
|
if (!(dir->i_mode & S_ISVTX))
|
|
|
return 0;
|
|
|
- if (current_user_ns() != inode_userns(inode))
|
|
|
- goto other_userns;
|
|
|
if (inode->i_uid == fsuid)
|
|
|
return 0;
|
|
|
if (dir->i_uid == fsuid)
|
|
|
return 0;
|
|
|
-
|
|
|
-other_userns:
|
|
|
- return !ns_capable(inode_userns(inode), CAP_FOWNER);
|
|
|
+ return !inode_capable(inode, CAP_FOWNER);
|
|
|
}
|
|
|
|
|
|
/*
|