Revert "FROMLIST: Add flags option to get xattr method paired to __vfs_getxattr"
This reverts commit 3484eba91d
.
It's causing too many merge issues, so revert it for now and hopefully
bring it back later...
Cc: Mark Salyzyn <salyzyn@android.com>
Bug: 133515582
Bug: 136124883
Bug: 129319403
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: Id70a37d9471eff58f0027a1371538858136604d3
This commit is contained in:
parent
54b3c7d8a2
commit
c4299f9857
@ -125,7 +125,7 @@ prototypes::
|
||||
bool (*list)(struct dentry *dentry);
|
||||
int (*get)(const struct xattr_handler *handler, struct dentry *dentry,
|
||||
struct inode *inode, const char *name, void *buffer,
|
||||
size_t size, int flags);
|
||||
size_t size);
|
||||
int (*set)(const struct xattr_handler *handler, struct dentry *dentry,
|
||||
struct inode *inode, const char *name, const void *buffer,
|
||||
size_t size, int flags);
|
||||
|
@ -214,8 +214,7 @@ int v9fs_acl_mode(struct inode *dir, umode_t *modep,
|
||||
|
||||
static int v9fs_xattr_get_acl(const struct xattr_handler *handler,
|
||||
struct dentry *dentry, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
struct v9fs_session_info *v9ses;
|
||||
struct posix_acl *acl;
|
||||
|
@ -149,8 +149,7 @@ ssize_t v9fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size)
|
||||
|
||||
static int v9fs_xattr_handler_get(const struct xattr_handler *handler,
|
||||
struct dentry *dentry, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
const char *full_name = xattr_full_name(handler, name);
|
||||
|
||||
|
@ -59,7 +59,7 @@ static const struct afs_operation_ops afs_fetch_acl_operation = {
|
||||
static int afs_xattr_get_acl(const struct xattr_handler *handler,
|
||||
struct dentry *dentry,
|
||||
struct inode *inode, const char *name,
|
||||
void *buffer, size_t size, int flags)
|
||||
void *buffer, size_t size)
|
||||
{
|
||||
struct afs_operation *op;
|
||||
struct afs_vnode *vnode = AFS_FS_I(inode);
|
||||
@ -160,7 +160,7 @@ static const struct afs_operation_ops yfs_fetch_opaque_acl_operation = {
|
||||
static int afs_xattr_get_yfs(const struct xattr_handler *handler,
|
||||
struct dentry *dentry,
|
||||
struct inode *inode, const char *name,
|
||||
void *buffer, size_t size, int flags)
|
||||
void *buffer, size_t size)
|
||||
{
|
||||
struct afs_operation *op;
|
||||
struct afs_vnode *vnode = AFS_FS_I(inode);
|
||||
@ -283,7 +283,7 @@ static const struct xattr_handler afs_xattr_yfs_handler = {
|
||||
static int afs_xattr_get_cell(const struct xattr_handler *handler,
|
||||
struct dentry *dentry,
|
||||
struct inode *inode, const char *name,
|
||||
void *buffer, size_t size, int flags)
|
||||
void *buffer, size_t size)
|
||||
{
|
||||
struct afs_vnode *vnode = AFS_FS_I(inode);
|
||||
struct afs_cell *cell = vnode->volume->cell;
|
||||
@ -310,7 +310,7 @@ static const struct xattr_handler afs_xattr_afs_cell_handler = {
|
||||
static int afs_xattr_get_fid(const struct xattr_handler *handler,
|
||||
struct dentry *dentry,
|
||||
struct inode *inode, const char *name,
|
||||
void *buffer, size_t size, int flags)
|
||||
void *buffer, size_t size)
|
||||
{
|
||||
struct afs_vnode *vnode = AFS_FS_I(inode);
|
||||
char text[16 + 1 + 24 + 1 + 8 + 1];
|
||||
@ -348,7 +348,7 @@ static const struct xattr_handler afs_xattr_afs_fid_handler = {
|
||||
static int afs_xattr_get_volume(const struct xattr_handler *handler,
|
||||
struct dentry *dentry,
|
||||
struct inode *inode, const char *name,
|
||||
void *buffer, size_t size, int flags)
|
||||
void *buffer, size_t size)
|
||||
{
|
||||
struct afs_vnode *vnode = AFS_FS_I(inode);
|
||||
const char *volname = vnode->volume->name;
|
||||
|
@ -355,8 +355,7 @@ ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size)
|
||||
|
||||
static int btrfs_xattr_handler_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
name = xattr_full_name(handler, name);
|
||||
return btrfs_getxattr(inode, name, buffer, size);
|
||||
|
@ -1230,8 +1230,7 @@ int __ceph_setxattr(struct inode *inode, const char *name,
|
||||
|
||||
static int ceph_get_xattr_handler(const struct xattr_handler *handler,
|
||||
struct dentry *dentry, struct inode *inode,
|
||||
const char *name, void *value, size_t size,
|
||||
int flags)
|
||||
const char *name, void *value, size_t size)
|
||||
{
|
||||
if (!ceph_is_valid_xattr(name))
|
||||
return -EOPNOTSUPP;
|
||||
|
@ -288,7 +288,7 @@ static int cifs_creation_time_get(struct dentry *dentry, struct inode *inode,
|
||||
|
||||
static int cifs_xattr_get(const struct xattr_handler *handler,
|
||||
struct dentry *dentry, struct inode *inode,
|
||||
const char *name, void *value, size_t size, int flags)
|
||||
const char *name, void *value, size_t size)
|
||||
{
|
||||
ssize_t rc = -EOPNOTSUPP;
|
||||
unsigned int xid;
|
||||
|
@ -1044,8 +1044,7 @@ ecryptfs_getxattr_lower(struct dentry *lower_dentry, struct inode *lower_inode,
|
||||
goto out;
|
||||
}
|
||||
inode_lock(lower_inode);
|
||||
rc = __vfs_getxattr(lower_dentry, lower_inode, name, value, size,
|
||||
XATTR_NOSECURITY);
|
||||
rc = __vfs_getxattr(lower_dentry, lower_inode, name, value, size);
|
||||
inode_unlock(lower_inode);
|
||||
out:
|
||||
return rc;
|
||||
@ -1130,8 +1129,7 @@ const struct inode_operations ecryptfs_main_iops = {
|
||||
|
||||
static int ecryptfs_xattr_get(const struct xattr_handler *handler,
|
||||
struct dentry *dentry, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return ecryptfs_getxattr(dentry, inode, name, buffer, size);
|
||||
}
|
||||
|
@ -422,7 +422,7 @@ static int ecryptfs_write_inode_size_to_xattr(struct inode *ecryptfs_inode)
|
||||
}
|
||||
inode_lock(lower_inode);
|
||||
size = __vfs_getxattr(lower_dentry, lower_inode, ECRYPTFS_XATTR_NAME,
|
||||
xattr_virt, PAGE_SIZE, XATTR_NOSECURITY);
|
||||
xattr_virt, PAGE_SIZE);
|
||||
if (size < 0)
|
||||
size = 8;
|
||||
put_unaligned_be64(i_size_read(ecryptfs_inode), xattr_virt);
|
||||
|
@ -471,8 +471,7 @@ int erofs_getxattr(struct inode *inode, int index,
|
||||
|
||||
static int erofs_xattr_generic_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
struct erofs_sb_info *const sbi = EROFS_I_SB(inode);
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
static int
|
||||
ext2_xattr_security_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size, int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return ext2_xattr_get(inode, EXT2_XATTR_INDEX_SECURITY, name,
|
||||
buffer, size);
|
||||
|
@ -18,7 +18,7 @@ ext2_xattr_trusted_list(struct dentry *dentry)
|
||||
static int
|
||||
ext2_xattr_trusted_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size, int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return ext2_xattr_get(inode, EXT2_XATTR_INDEX_TRUSTED, name,
|
||||
buffer, size);
|
||||
|
@ -20,7 +20,7 @@ ext2_xattr_user_list(struct dentry *dentry)
|
||||
static int
|
||||
ext2_xattr_user_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size, int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
if (!test_opt(inode->i_sb, XATTR_USER))
|
||||
return -EOPNOTSUPP;
|
||||
|
@ -21,8 +21,7 @@ ext4_xattr_hurd_list(struct dentry *dentry)
|
||||
static int
|
||||
ext4_xattr_hurd_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
if (!test_opt(inode->i_sb, XATTR_USER))
|
||||
return -EOPNOTSUPP;
|
||||
|
@ -15,7 +15,7 @@
|
||||
static int
|
||||
ext4_xattr_security_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size, int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return ext4_xattr_get(inode, EXT4_XATTR_INDEX_SECURITY,
|
||||
name, buffer, size);
|
||||
|
@ -22,7 +22,7 @@ ext4_xattr_trusted_list(struct dentry *dentry)
|
||||
static int
|
||||
ext4_xattr_trusted_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size, int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return ext4_xattr_get(inode, EXT4_XATTR_INDEX_TRUSTED,
|
||||
name, buffer, size);
|
||||
|
@ -21,7 +21,7 @@ ext4_xattr_user_list(struct dentry *dentry)
|
||||
static int
|
||||
ext4_xattr_user_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size, int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
if (!test_opt(inode->i_sb, XATTR_USER))
|
||||
return -EOPNOTSUPP;
|
||||
|
@ -44,7 +44,7 @@ static void xattr_free(struct f2fs_sb_info *sbi, void *xattr_addr,
|
||||
|
||||
static int f2fs_xattr_generic_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size, int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
|
||||
|
||||
@ -99,7 +99,7 @@ static bool f2fs_xattr_trusted_list(struct dentry *dentry)
|
||||
|
||||
static int f2fs_xattr_advise_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size, int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
if (buffer)
|
||||
*((char *)buffer) = F2FS_I(inode)->i_advise;
|
||||
|
@ -179,7 +179,7 @@ int fuse_removexattr(struct inode *inode, const char *name)
|
||||
|
||||
static int fuse_xattr_get(const struct xattr_handler *handler,
|
||||
struct dentry *dentry, struct inode *inode,
|
||||
const char *name, void *value, size_t size, int flags)
|
||||
const char *name, void *value, size_t size)
|
||||
{
|
||||
if (fuse_is_bad(inode))
|
||||
return -EIO;
|
||||
@ -208,7 +208,7 @@ static bool no_xattr_list(struct dentry *dentry)
|
||||
|
||||
static int no_xattr_get(const struct xattr_handler *handler,
|
||||
struct dentry *dentry, struct inode *inode,
|
||||
const char *name, void *value, size_t size, int flags)
|
||||
const char *name, void *value, size_t size)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
@ -588,8 +588,7 @@ static int __gfs2_xattr_get(struct inode *inode, const char *name,
|
||||
|
||||
static int gfs2_xattr_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
struct gfs2_inode *ip = GFS2_I(inode);
|
||||
struct gfs2_holder gh;
|
||||
|
@ -115,7 +115,7 @@ static ssize_t __hfs_getxattr(struct inode *inode, enum hfs_xattr_type type,
|
||||
|
||||
static int hfs_xattr_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *value, size_t size, int flags)
|
||||
const char *name, void *value, size_t size)
|
||||
{
|
||||
return __hfs_getxattr(inode, handler->flags, value, size);
|
||||
}
|
||||
|
@ -839,8 +839,7 @@ static int hfsplus_removexattr(struct inode *inode, const char *name)
|
||||
|
||||
static int hfsplus_osx_getxattr(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
/*
|
||||
* Don't allow retrieving properly prefixed attributes
|
||||
|
@ -15,8 +15,7 @@
|
||||
|
||||
static int hfsplus_security_getxattr(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer,
|
||||
size_t size, int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return hfsplus_getxattr(inode, name, buffer, size,
|
||||
XATTR_SECURITY_PREFIX,
|
||||
|
@ -14,8 +14,7 @@
|
||||
|
||||
static int hfsplus_trusted_getxattr(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer,
|
||||
size_t size, int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return hfsplus_getxattr(inode, name, buffer, size,
|
||||
XATTR_TRUSTED_PREFIX,
|
||||
|
@ -14,8 +14,7 @@
|
||||
|
||||
static int hfsplus_user_getxattr(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
|
||||
return hfsplus_getxattr(inode, name, buffer, size,
|
||||
|
@ -128,8 +128,7 @@ const struct inode_operations incfs_file_inode_ops = {
|
||||
|
||||
static int incfs_handler_getxattr(const struct xattr_handler *xh,
|
||||
struct dentry *d, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return incfs_getxattr(d, name, buffer, size);
|
||||
}
|
||||
|
@ -50,8 +50,7 @@ int jffs2_init_security(struct inode *inode, struct inode *dir,
|
||||
/* ---- XATTR Handler for "security.*" ----------------- */
|
||||
static int jffs2_security_getxattr(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return do_jffs2_getxattr(inode, JFFS2_XPREFIX_SECURITY,
|
||||
name, buffer, size);
|
||||
|
@ -18,8 +18,7 @@
|
||||
|
||||
static int jffs2_trusted_getxattr(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return do_jffs2_getxattr(inode, JFFS2_XPREFIX_TRUSTED,
|
||||
name, buffer, size);
|
||||
|
@ -18,8 +18,7 @@
|
||||
|
||||
static int jffs2_user_getxattr(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return do_jffs2_getxattr(inode, JFFS2_XPREFIX_USER,
|
||||
name, buffer, size);
|
||||
|
@ -925,7 +925,7 @@ static int __jfs_xattr_set(struct inode *inode, const char *name,
|
||||
|
||||
static int jfs_xattr_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *value, size_t size, int flags)
|
||||
const char *name, void *value, size_t size)
|
||||
{
|
||||
name = xattr_full_name(handler, name);
|
||||
return __jfs_getxattr(inode, name, value, size);
|
||||
@ -942,8 +942,7 @@ static int jfs_xattr_set(const struct xattr_handler *handler,
|
||||
|
||||
static int jfs_xattr_get_os2(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *value, size_t size,
|
||||
int flags)
|
||||
const char *name, void *value, size_t size)
|
||||
{
|
||||
if (is_known_namespace(name))
|
||||
return -EOPNOTSUPP;
|
||||
|
@ -310,8 +310,7 @@ int kernfs_xattr_set(struct kernfs_node *kn, const char *name,
|
||||
|
||||
static int kernfs_vfs_xattr_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *suffix, void *value, size_t size,
|
||||
int flags)
|
||||
const char *suffix, void *value, size_t size)
|
||||
{
|
||||
const char *name = xattr_full_name(handler, suffix);
|
||||
struct kernfs_node *kn = inode->i_private;
|
||||
|
@ -7500,8 +7500,7 @@ static int nfs4_xattr_set_nfs4_acl(const struct xattr_handler *handler,
|
||||
|
||||
static int nfs4_xattr_get_nfs4_acl(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *key, void *buf, size_t buflen,
|
||||
int flags)
|
||||
const char *key, void *buf, size_t buflen)
|
||||
{
|
||||
return nfs4_proc_get_acl(inode, buf, buflen);
|
||||
}
|
||||
@ -7526,8 +7525,7 @@ static int nfs4_xattr_set_nfs4_label(const struct xattr_handler *handler,
|
||||
|
||||
static int nfs4_xattr_get_nfs4_label(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *key, void *buf, size_t buflen,
|
||||
int flags)
|
||||
const char *key, void *buf, size_t buflen)
|
||||
{
|
||||
if (security_ismaclabel(key))
|
||||
return nfs4_get_security_label(inode, buf, buflen);
|
||||
@ -7604,8 +7602,7 @@ static int nfs4_xattr_set_nfs4_user(const struct xattr_handler *handler,
|
||||
|
||||
static int nfs4_xattr_get_nfs4_user(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *key, void *buf, size_t buflen,
|
||||
int flags)
|
||||
const char *key, void *buf, size_t buflen)
|
||||
{
|
||||
struct nfs_access_entry cache;
|
||||
ssize_t ret;
|
||||
|
@ -7242,8 +7242,7 @@ int ocfs2_init_security_and_acl(struct inode *dir,
|
||||
*/
|
||||
static int ocfs2_xattr_security_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return ocfs2_xattr_get(inode, OCFS2_XATTR_INDEX_SECURITY,
|
||||
name, buffer, size);
|
||||
@ -7315,8 +7314,7 @@ const struct xattr_handler ocfs2_xattr_security_handler = {
|
||||
*/
|
||||
static int ocfs2_xattr_trusted_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return ocfs2_xattr_get(inode, OCFS2_XATTR_INDEX_TRUSTED,
|
||||
name, buffer, size);
|
||||
@ -7342,8 +7340,7 @@ const struct xattr_handler ocfs2_xattr_trusted_handler = {
|
||||
*/
|
||||
static int ocfs2_xattr_user_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
|
||||
|
||||
|
@ -541,8 +541,7 @@ static int orangefs_xattr_get_default(const struct xattr_handler *handler,
|
||||
struct inode *inode,
|
||||
const char *name,
|
||||
void *buffer,
|
||||
size_t size,
|
||||
int flags)
|
||||
size_t size)
|
||||
{
|
||||
return orangefs_inode_getxattr(inode, name, buffer, size);
|
||||
|
||||
|
@ -386,7 +386,7 @@ int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name,
|
||||
}
|
||||
|
||||
int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name,
|
||||
void *value, size_t size, int flags)
|
||||
void *value, size_t size)
|
||||
{
|
||||
ssize_t res;
|
||||
const struct cred *old_cred;
|
||||
@ -395,7 +395,7 @@ int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name,
|
||||
|
||||
old_cred = ovl_override_creds(dentry->d_sb);
|
||||
res = __vfs_getxattr(realdentry, d_inode(realdentry), name,
|
||||
value, size, flags);
|
||||
value, size);
|
||||
revert_creds(old_cred);
|
||||
return res;
|
||||
}
|
||||
|
@ -188,7 +188,7 @@ static inline ssize_t ovl_do_getxattr(struct ovl_fs *ofs, struct dentry *dentry,
|
||||
const char *name = ovl_xattr(ofs, ox);
|
||||
struct inode *ip = d_inode(dentry);
|
||||
|
||||
return __vfs_getxattr(dentry, ip, name, value, size, XATTR_NOSECURITY);
|
||||
return __vfs_getxattr(dentry, ip, name, value, size);
|
||||
}
|
||||
|
||||
static inline int ovl_do_setxattr(struct ovl_fs *ofs, struct dentry *dentry,
|
||||
@ -445,7 +445,7 @@ int ovl_permission(struct inode *inode, int mask);
|
||||
int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name,
|
||||
const void *value, size_t size, int flags);
|
||||
int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name,
|
||||
void *value, size_t size, int flags);
|
||||
void *value, size_t size);
|
||||
ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size);
|
||||
struct posix_acl *ovl_get_acl(struct inode *inode, int type);
|
||||
int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags);
|
||||
|
@ -982,9 +982,9 @@ static unsigned int ovl_split_lowerdirs(char *str)
|
||||
static int __maybe_unused
|
||||
ovl_posix_acl_xattr_get(const struct xattr_handler *handler,
|
||||
struct dentry *dentry, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size, int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return ovl_xattr_get(dentry, inode, handler->name, buffer, size, flags);
|
||||
return ovl_xattr_get(dentry, inode, handler->name, buffer, size);
|
||||
}
|
||||
|
||||
static int __maybe_unused
|
||||
@ -1047,8 +1047,7 @@ ovl_posix_acl_xattr_set(const struct xattr_handler *handler,
|
||||
|
||||
static int ovl_own_xattr_get(const struct xattr_handler *handler,
|
||||
struct dentry *dentry, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
@ -1063,10 +1062,9 @@ static int ovl_own_xattr_set(const struct xattr_handler *handler,
|
||||
|
||||
static int ovl_other_xattr_get(const struct xattr_handler *handler,
|
||||
struct dentry *dentry, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
return ovl_xattr_get(dentry, inode, name, buffer, size, flags);
|
||||
return ovl_xattr_get(dentry, inode, name, buffer, size);
|
||||
}
|
||||
|
||||
static int ovl_other_xattr_set(const struct xattr_handler *handler,
|
||||
|
@ -835,7 +835,7 @@ EXPORT_SYMBOL (posix_acl_to_xattr);
|
||||
static int
|
||||
posix_acl_xattr_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *value, size_t size, int flags)
|
||||
const char *name, void *value, size_t size)
|
||||
{
|
||||
struct posix_acl *acl;
|
||||
int error;
|
||||
|
@ -11,8 +11,7 @@
|
||||
|
||||
static int
|
||||
security_get(const struct xattr_handler *handler, struct dentry *unused,
|
||||
struct inode *inode, const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
struct inode *inode, const char *name, void *buffer, size_t size)
|
||||
{
|
||||
if (IS_PRIVATE(inode))
|
||||
return -EPERM;
|
||||
|
@ -10,8 +10,7 @@
|
||||
|
||||
static int
|
||||
trusted_get(const struct xattr_handler *handler, struct dentry *unused,
|
||||
struct inode *inode, const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
struct inode *inode, const char *name, void *buffer, size_t size)
|
||||
{
|
||||
if (!capable(CAP_SYS_ADMIN) || IS_PRIVATE(inode))
|
||||
return -EPERM;
|
||||
|
@ -9,8 +9,7 @@
|
||||
|
||||
static int
|
||||
user_get(const struct xattr_handler *handler, struct dentry *unused,
|
||||
struct inode *inode, const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
struct inode *inode, const char *name, void *buffer, size_t size)
|
||||
{
|
||||
if (!reiserfs_xattrs_user(inode->i_sb))
|
||||
return -EOPNOTSUPP;
|
||||
|
@ -204,7 +204,7 @@ static int squashfs_xattr_handler_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused,
|
||||
struct inode *inode,
|
||||
const char *name,
|
||||
void *buffer, size_t size, int flags)
|
||||
void *buffer, size_t size)
|
||||
{
|
||||
return squashfs_xattr_get(inode, handler->flags, name,
|
||||
buffer, size);
|
||||
|
@ -671,8 +671,7 @@ int ubifs_init_security(struct inode *dentry, struct inode *inode,
|
||||
|
||||
static int xattr_get(const struct xattr_handler *handler,
|
||||
struct dentry *dentry, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
dbg_gen("xattr '%s', ino %lu ('%pd'), buf size %zd", name,
|
||||
inode->i_ino, dentry, size);
|
||||
|
36
fs/xattr.c
36
fs/xattr.c
@ -356,7 +356,7 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value,
|
||||
return PTR_ERR(handler);
|
||||
if (!handler->get)
|
||||
return -EOPNOTSUPP;
|
||||
error = handler->get(handler, dentry, inode, name, NULL, 0, 0);
|
||||
error = handler->get(handler, dentry, inode, name, NULL, 0);
|
||||
if (error < 0)
|
||||
return error;
|
||||
|
||||
@ -367,20 +367,32 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value,
|
||||
memset(value, 0, error + 1);
|
||||
}
|
||||
|
||||
error = handler->get(handler, dentry, inode, name, value, error, 0);
|
||||
error = handler->get(handler, dentry, inode, name, value, error);
|
||||
*xattr_value = value;
|
||||
return error;
|
||||
}
|
||||
|
||||
ssize_t
|
||||
__vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
|
||||
void *value, size_t size, int flags)
|
||||
void *value, size_t size)
|
||||
{
|
||||
const struct xattr_handler *handler;
|
||||
|
||||
handler = xattr_resolve_name(inode, &name);
|
||||
if (IS_ERR(handler))
|
||||
return PTR_ERR(handler);
|
||||
if (!handler->get)
|
||||
return -EOPNOTSUPP;
|
||||
return handler->get(handler, dentry, inode, name, value, size);
|
||||
}
|
||||
EXPORT_SYMBOL(__vfs_getxattr);
|
||||
|
||||
ssize_t
|
||||
vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
int error;
|
||||
|
||||
if (flags & XATTR_NOSECURITY)
|
||||
goto nolsm;
|
||||
error = xattr_permission(inode, name, MAY_READ);
|
||||
if (error)
|
||||
return error;
|
||||
@ -402,19 +414,7 @@ __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
|
||||
return ret;
|
||||
}
|
||||
nolsm:
|
||||
handler = xattr_resolve_name(inode, &name);
|
||||
if (IS_ERR(handler))
|
||||
return PTR_ERR(handler);
|
||||
if (!handler->get)
|
||||
return -EOPNOTSUPP;
|
||||
return handler->get(handler, dentry, inode, name, value, size, flags);
|
||||
}
|
||||
EXPORT_SYMBOL(__vfs_getxattr);
|
||||
|
||||
ssize_t
|
||||
vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
|
||||
{
|
||||
return __vfs_getxattr(dentry, dentry->d_inode, name, value, size, 0);
|
||||
return __vfs_getxattr(dentry, inode, name, value, size);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(vfs_getxattr);
|
||||
|
||||
|
@ -19,8 +19,7 @@
|
||||
|
||||
static int
|
||||
xfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused,
|
||||
struct inode *inode, const char *name, void *value, size_t size,
|
||||
int flags)
|
||||
struct inode *inode, const char *name, void *value, size_t size)
|
||||
{
|
||||
struct xfs_da_args args = {
|
||||
.dp = XFS_I(inode),
|
||||
|
@ -31,10 +31,10 @@ struct xattr_handler {
|
||||
const char *prefix;
|
||||
int flags; /* fs private flags */
|
||||
bool (*list)(struct dentry *dentry);
|
||||
int (*get)(const struct xattr_handler *handler, struct dentry *dentry,
|
||||
int (*get)(const struct xattr_handler *, struct dentry *dentry,
|
||||
struct inode *inode, const char *name, void *buffer,
|
||||
size_t size, int flags);
|
||||
int (*set)(const struct xattr_handler *handler, struct dentry *dentry,
|
||||
size_t size);
|
||||
int (*set)(const struct xattr_handler *, struct dentry *dentry,
|
||||
struct inode *inode, const char *name, const void *buffer,
|
||||
size_t size, int flags);
|
||||
};
|
||||
@ -47,8 +47,7 @@ struct xattr {
|
||||
size_t value_len;
|
||||
};
|
||||
|
||||
ssize_t __vfs_getxattr(struct dentry *dentry, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size, int flags);
|
||||
ssize_t __vfs_getxattr(struct dentry *, struct inode *, const char *, void *, size_t);
|
||||
ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t);
|
||||
ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size);
|
||||
int __vfs_setxattr(struct dentry *, struct inode *, const char *, const void *, size_t, int);
|
||||
|
@ -18,11 +18,8 @@
|
||||
#if __UAPI_DEF_XATTR
|
||||
#define __USE_KERNEL_XATTR_DEFS
|
||||
|
||||
#define XATTR_CREATE 0x1 /* set value, fail if attr already exists */
|
||||
#define XATTR_REPLACE 0x2 /* set value, fail if attr does not exist */
|
||||
#ifdef __KERNEL__ /* following is kernel internal, colocated for maintenance */
|
||||
#define XATTR_NOSECURITY 0x4 /* get value, do not involve security check */
|
||||
#endif
|
||||
#define XATTR_CREATE 0x1 /* set value, fail if attr already exists */
|
||||
#define XATTR_REPLACE 0x2 /* set value, fail if attr does not exist */
|
||||
#endif
|
||||
|
||||
/* Namespaces */
|
||||
|
@ -3264,8 +3264,7 @@ static int shmem_initxattrs(struct inode *inode,
|
||||
|
||||
static int shmem_xattr_handler_get(const struct xattr_handler *handler,
|
||||
struct dentry *unused, struct inode *inode,
|
||||
const char *name, void *buffer, size_t size,
|
||||
int flags)
|
||||
const char *name, void *buffer, size_t size)
|
||||
{
|
||||
struct shmem_inode_info *info = SHMEM_I(inode);
|
||||
|
||||
|
@ -314,8 +314,7 @@ static const struct dentry_operations sockfs_dentry_operations = {
|
||||
|
||||
static int sockfs_xattr_get(const struct xattr_handler *handler,
|
||||
struct dentry *dentry, struct inode *inode,
|
||||
const char *suffix, void *value, size_t size,
|
||||
int flags)
|
||||
const char *suffix, void *value, size_t size)
|
||||
{
|
||||
if (value) {
|
||||
if (dentry->d_name.len + 1 > size)
|
||||
|
@ -297,8 +297,7 @@ int cap_inode_need_killpriv(struct dentry *dentry)
|
||||
struct inode *inode = d_backing_inode(dentry);
|
||||
int error;
|
||||
|
||||
error = __vfs_getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0,
|
||||
XATTR_NOSECURITY);
|
||||
error = __vfs_getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0);
|
||||
return error > 0;
|
||||
}
|
||||
|
||||
@ -615,8 +614,7 @@ int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data
|
||||
|
||||
fs_ns = inode->i_sb->s_user_ns;
|
||||
size = __vfs_getxattr((struct dentry *)dentry, inode,
|
||||
XATTR_NAME_CAPS, &data, XATTR_CAPS_SZ,
|
||||
XATTR_NOSECURITY);
|
||||
XATTR_NAME_CAPS, &data, XATTR_CAPS_SZ);
|
||||
if (size == -ENODATA || size == -EOPNOTSUPP)
|
||||
/* no data, that's ok */
|
||||
return -ENODATA;
|
||||
|
@ -101,8 +101,7 @@ static int evm_find_protected_xattrs(struct dentry *dentry)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
list_for_each_entry_lockless(xattr, &evm_config_xattrnames, list) {
|
||||
error = __vfs_getxattr(dentry, inode, xattr->name, NULL, 0,
|
||||
XATTR_NOSECURITY);
|
||||
error = __vfs_getxattr(dentry, inode, xattr->name, NULL, 0);
|
||||
if (error < 0) {
|
||||
if (error == -ENODATA)
|
||||
continue;
|
||||
|
@ -505,8 +505,7 @@ static int sb_check_xattr_support(struct super_block *sb)
|
||||
goto fallback;
|
||||
}
|
||||
|
||||
rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL, 0,
|
||||
XATTR_NOSECURITY);
|
||||
rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL, 0);
|
||||
if (rc < 0 && rc != -ENODATA) {
|
||||
if (rc == -EOPNOTSUPP) {
|
||||
pr_warn("SELinux: (dev %s, type %s) has no security xattr handler\n",
|
||||
@ -1361,14 +1360,12 @@ static int inode_doinit_use_xattr(struct inode *inode, struct dentry *dentry,
|
||||
return -ENOMEM;
|
||||
|
||||
context[len] = '\0';
|
||||
rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len,
|
||||
XATTR_NOSECURITY);
|
||||
rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len);
|
||||
if (rc == -ERANGE) {
|
||||
kfree(context);
|
||||
|
||||
/* Need a larger buffer. Query for the right size. */
|
||||
rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0,
|
||||
XATTR_NOSECURITY);
|
||||
rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
@ -1379,7 +1376,7 @@ static int inode_doinit_use_xattr(struct inode *inode, struct dentry *dentry,
|
||||
|
||||
context[len] = '\0';
|
||||
rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX,
|
||||
context, len, XATTR_NOSECURITY);
|
||||
context, len);
|
||||
}
|
||||
if (rc < 0) {
|
||||
kfree(context);
|
||||
|
@ -289,8 +289,7 @@ static struct smack_known *smk_fetch(const char *name, struct inode *ip,
|
||||
if (buffer == NULL)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
rc = __vfs_getxattr(dp, ip, name, buffer, SMK_LONGLABEL,
|
||||
XATTR_NOSECURITY);
|
||||
rc = __vfs_getxattr(dp, ip, name, buffer, SMK_LONGLABEL);
|
||||
if (rc < 0)
|
||||
skp = ERR_PTR(rc);
|
||||
else if (rc == 0)
|
||||
@ -3433,7 +3432,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode)
|
||||
} else {
|
||||
rc = __vfs_getxattr(dp, inode,
|
||||
XATTR_NAME_SMACKTRANSMUTE, trattr,
|
||||
TRANS_TRUE_SIZE, XATTR_NOSECURITY);
|
||||
TRANS_TRUE_SIZE);
|
||||
if (rc >= 0 && strncmp(trattr, TRANS_TRUE,
|
||||
TRANS_TRUE_SIZE) != 0)
|
||||
rc = -EINVAL;
|
||||
|
Loading…
Reference in New Issue
Block a user