vfs: split out vfs_getattr_nosec
The filehandle lookup code wants this version of getattr. Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
5a3cd99285
commit
b7a6ec52dd
31
fs/stat.c
31
fs/stat.c
|
@ -37,14 +37,21 @@ void generic_fillattr(struct inode *inode, struct kstat *stat)
|
||||||
|
|
||||||
EXPORT_SYMBOL(generic_fillattr);
|
EXPORT_SYMBOL(generic_fillattr);
|
||||||
|
|
||||||
int vfs_getattr(struct path *path, struct kstat *stat)
|
/**
|
||||||
|
* vfs_getattr_nosec - getattr without security checks
|
||||||
|
* @path: file to get attributes from
|
||||||
|
* @stat: structure to return attributes in
|
||||||
|
*
|
||||||
|
* Get attributes without calling security_inode_getattr.
|
||||||
|
*
|
||||||
|
* Currently the only caller other than vfs_getattr is internal to the
|
||||||
|
* filehandle lookup code, which uses only the inode number and returns
|
||||||
|
* no attributes to any user. Any other code probably wants
|
||||||
|
* vfs_getattr.
|
||||||
|
*/
|
||||||
|
int vfs_getattr_nosec(struct path *path, struct kstat *stat)
|
||||||
{
|
{
|
||||||
struct inode *inode = path->dentry->d_inode;
|
struct inode *inode = path->dentry->d_inode;
|
||||||
int retval;
|
|
||||||
|
|
||||||
retval = security_inode_getattr(path->mnt, path->dentry);
|
|
||||||
if (retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
if (inode->i_op->getattr)
|
if (inode->i_op->getattr)
|
||||||
return inode->i_op->getattr(path->mnt, path->dentry, stat);
|
return inode->i_op->getattr(path->mnt, path->dentry, stat);
|
||||||
|
@ -53,6 +60,18 @@ int vfs_getattr(struct path *path, struct kstat *stat)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(vfs_getattr_nosec);
|
||||||
|
|
||||||
|
int vfs_getattr(struct path *path, struct kstat *stat)
|
||||||
|
{
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
retval = security_inode_getattr(path->mnt, path->dentry);
|
||||||
|
if (retval)
|
||||||
|
return retval;
|
||||||
|
return vfs_getattr_nosec(path, stat);
|
||||||
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(vfs_getattr);
|
EXPORT_SYMBOL(vfs_getattr);
|
||||||
|
|
||||||
int vfs_fstat(unsigned int fd, struct kstat *stat)
|
int vfs_fstat(unsigned int fd, struct kstat *stat)
|
||||||
|
|
|
@ -2504,6 +2504,7 @@ extern const struct inode_operations page_symlink_inode_operations;
|
||||||
extern void kfree_put_link(struct dentry *, struct nameidata *, void *);
|
extern void kfree_put_link(struct dentry *, struct nameidata *, void *);
|
||||||
extern int generic_readlink(struct dentry *, char __user *, int);
|
extern int generic_readlink(struct dentry *, char __user *, int);
|
||||||
extern void generic_fillattr(struct inode *, struct kstat *);
|
extern void generic_fillattr(struct inode *, struct kstat *);
|
||||||
|
int vfs_getattr_nosec(struct path *path, struct kstat *stat);
|
||||||
extern int vfs_getattr(struct path *, struct kstat *);
|
extern int vfs_getattr(struct path *, struct kstat *);
|
||||||
void __inode_add_bytes(struct inode *inode, loff_t bytes);
|
void __inode_add_bytes(struct inode *inode, loff_t bytes);
|
||||||
void inode_add_bytes(struct inode *inode, loff_t bytes);
|
void inode_add_bytes(struct inode *inode, loff_t bytes);
|
||||||
|
|
Loading…
Reference in New Issue