Files
ubports_kernel_google_msm/fs/namei.c.rej

74 lines
1.8 KiB
Plaintext

--- fs/namei.c
+++ fs/namei.c
@@ -327,36 +327,6 @@ static inline int do_inode_permission(struct inode *inode, int mask)
return generic_permission(inode, mask);
}
-/**
- * inode_only_permission - check access rights to a given inode only
- * @inode: inode to check permissions on
- * @mask: right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC, ...)
- *
- * Uses to check read/write/execute permissions on an inode directly, we do
- * not check filesystem permissions.
- */
-int inode_only_permission(struct inode *inode, int mask)
-{
- int retval;
-
- /*
- * Nobody gets write access to an immutable file.
- */
- if (unlikely(mask & MAY_WRITE) && IS_IMMUTABLE(inode))
- return -EACCES;
-
- retval = do_inode_permission(inode, mask);
- if (retval)
- return retval;
-
- retval = devcgroup_inode_permission(inode, mask);
- if (retval)
- return retval;
-
- return security_inode_permission(inode, mask);
-}
-EXPORT_SYMBOL(inode_only_permission);
-
/**
* inode_permission - check for access rights to a given inode
* @inode: inode to check permission on
@@ -371,6 +341,8 @@ static inline int do_inode_permission(struct inode *inode, int mask)
*/
int inode_permission(struct inode *inode, int mask)
{
+ int retval;
+
if (unlikely(mask & MAY_WRITE)) {
umode_t mode = inode->i_mode;
@@ -380,9 +352,23 @@ int inode_permission(struct inode *inode, int mask)
if (IS_RDONLY(inode) &&
(S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))
return -EROFS;
+
+ /*
+ * Nobody gets write access to an immutable file.
+ */
+ if (IS_IMMUTABLE(inode))
+ return -EACCES;
}
- return inode_only_permission(inode, mask);
+ retval = do_inode_permission(inode, mask);
+ if (retval)
+ return retval;
+
+ retval = devcgroup_inode_permission(inode, mask);
+ if (retval)
+ return retval;
+
+ return security_inode_permission(inode, mask);
}
/**