Skip to content

Commit 4bfd054

Browse files
ebiggersAl Viro
authored andcommitted
fs: fold __inode_permission() into inode_permission()
Since commit 9c630eb ("ovl: simplify permission checking"), overlayfs doesn't call __inode_permission() anymore, which leaves no users other than inode_permission(). So just fold it back into inode_permission(). Signed-off-by: Eric Biggers <[email protected]> Signed-off-by: Al Viro <[email protected]>
1 parent e1fc742 commit 4bfd054

File tree

2 files changed

+26
-46
lines changed

2 files changed

+26
-46
lines changed

fs/namei.c

Lines changed: 26 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -390,50 +390,6 @@ static inline int do_inode_permission(struct inode *inode, int mask)
390390
return generic_permission(inode, mask);
391391
}
392392

393-
/**
394-
* __inode_permission - Check for access rights to a given inode
395-
* @inode: Inode to check permission on
396-
* @mask: Right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC)
397-
*
398-
* Check for read/write/execute permissions on an inode.
399-
*
400-
* When checking for MAY_APPEND, MAY_WRITE must also be set in @mask.
401-
*
402-
* This does not check for a read-only file system. You probably want
403-
* inode_permission().
404-
*/
405-
int __inode_permission(struct inode *inode, int mask)
406-
{
407-
int retval;
408-
409-
if (unlikely(mask & MAY_WRITE)) {
410-
/*
411-
* Nobody gets write access to an immutable file.
412-
*/
413-
if (IS_IMMUTABLE(inode))
414-
return -EPERM;
415-
416-
/*
417-
* Updating mtime will likely cause i_uid and i_gid to be
418-
* written back improperly if their true value is unknown
419-
* to the vfs.
420-
*/
421-
if (HAS_UNMAPPED_ID(inode))
422-
return -EACCES;
423-
}
424-
425-
retval = do_inode_permission(inode, mask);
426-
if (retval)
427-
return retval;
428-
429-
retval = devcgroup_inode_permission(inode, mask);
430-
if (retval)
431-
return retval;
432-
433-
return security_inode_permission(inode, mask);
434-
}
435-
EXPORT_SYMBOL(__inode_permission);
436-
437393
/**
438394
* sb_permission - Check superblock-level permissions
439395
* @sb: Superblock of inode to check permission on
@@ -472,7 +428,32 @@ int inode_permission(struct inode *inode, int mask)
472428
retval = sb_permission(inode->i_sb, inode, mask);
473429
if (retval)
474430
return retval;
475-
return __inode_permission(inode, mask);
431+
432+
if (unlikely(mask & MAY_WRITE)) {
433+
/*
434+
* Nobody gets write access to an immutable file.
435+
*/
436+
if (IS_IMMUTABLE(inode))
437+
return -EPERM;
438+
439+
/*
440+
* Updating mtime will likely cause i_uid and i_gid to be
441+
* written back improperly if their true value is unknown
442+
* to the vfs.
443+
*/
444+
if (HAS_UNMAPPED_ID(inode))
445+
return -EACCES;
446+
}
447+
448+
retval = do_inode_permission(inode, mask);
449+
if (retval)
450+
return retval;
451+
452+
retval = devcgroup_inode_permission(inode, mask);
453+
if (retval)
454+
return retval;
455+
456+
return security_inode_permission(inode, mask);
476457
}
477458
EXPORT_SYMBOL(inode_permission);
478459

include/linux/fs.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2699,7 +2699,6 @@ extern sector_t bmap(struct inode *, sector_t);
26992699
#endif
27002700
extern int notify_change(struct dentry *, struct iattr *, struct inode **);
27012701
extern int inode_permission(struct inode *, int);
2702-
extern int __inode_permission(struct inode *, int);
27032702
extern int generic_permission(struct inode *, int);
27042703
extern int __check_sticky(struct inode *dir, struct inode *inode);
27052704

0 commit comments

Comments
 (0)