diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2016-04-11 00:48:00 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2016-04-11 00:48:00 -0400 |
commit | ce23e640133484eebc20ca7b7668388213e11327 (patch) | |
tree | 0b37de221fe6790396c3ae636bc56e5aacbcaf46 | |
parent | b296821a7c42fa58baa17513b2b7b30ae66f3336 (diff) |
->getxattr(): pass dentry and inode as separate arguments
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
34 files changed, 94 insertions, 85 deletions
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting index f1b87d8aa2da..57bb3754a027 100644 --- a/Documentation/filesystems/porting +++ b/Documentation/filesystems/porting | |||
@@ -525,3 +525,9 @@ in your dentry operations instead. | |||
525 | set_delayed_call() where it used to set *cookie. | 525 | set_delayed_call() where it used to set *cookie. |
526 | ->put_link() is gone - just give the destructor to set_delayed_call() | 526 | ->put_link() is gone - just give the destructor to set_delayed_call() |
527 | in ->get_link(). | 527 | in ->get_link(). |
528 | -- | ||
529 | [mandatory] | ||
530 | ->getxattr() and xattr_handler.get() get dentry and inode passed separately. | ||
531 | dentry might be yet to be attached to inode, so do _not_ use its ->d_inode | ||
532 | in the instances. Rationale: !@#!@# security_d_instantiate() needs to be | ||
533 | called before we attach dentry to inode. | ||
diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h b/drivers/staging/lustre/lustre/llite/llite_internal.h index 3e1572cb457b..d28efd27af57 100644 --- a/drivers/staging/lustre/lustre/llite/llite_internal.h +++ b/drivers/staging/lustre/lustre/llite/llite_internal.h | |||
@@ -1042,8 +1042,8 @@ static inline __u64 ll_file_maxbytes(struct inode *inode) | |||
1042 | /* llite/xattr.c */ | 1042 | /* llite/xattr.c */ |
1043 | int ll_setxattr(struct dentry *dentry, const char *name, | 1043 | int ll_setxattr(struct dentry *dentry, const char *name, |
1044 | const void *value, size_t size, int flags); | 1044 | const void *value, size_t size, int flags); |
1045 | ssize_t ll_getxattr(struct dentry *dentry, const char *name, | 1045 | ssize_t ll_getxattr(struct dentry *dentry, struct inode *inode, |
1046 | void *buffer, size_t size); | 1046 | const char *name, void *buffer, size_t size); |
1047 | ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size); | 1047 | ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size); |
1048 | int ll_removexattr(struct dentry *dentry, const char *name); | 1048 | int ll_removexattr(struct dentry *dentry, const char *name); |
1049 | 1049 | ||
diff --git a/drivers/staging/lustre/lustre/llite/xattr.c b/drivers/staging/lustre/lustre/llite/xattr.c index b68dcc921ca2..c671f221c28c 100644 --- a/drivers/staging/lustre/lustre/llite/xattr.c +++ b/drivers/staging/lustre/lustre/llite/xattr.c | |||
@@ -451,11 +451,9 @@ out: | |||
451 | return rc; | 451 | return rc; |
452 | } | 452 | } |
453 | 453 | ||
454 | ssize_t ll_getxattr(struct dentry *dentry, const char *name, | 454 | ssize_t ll_getxattr(struct dentry *dentry, struct inode *inode, |
455 | void *buffer, size_t size) | 455 | const char *name, void *buffer, size_t size) |
456 | { | 456 | { |
457 | struct inode *inode = d_inode(dentry); | ||
458 | |||
459 | LASSERT(inode); | 457 | LASSERT(inode); |
460 | LASSERT(name); | 458 | LASSERT(name); |
461 | 459 | ||
diff --git a/fs/bad_inode.c b/fs/bad_inode.c index 103f5d7c3083..72e35b721608 100644 --- a/fs/bad_inode.c +++ b/fs/bad_inode.c | |||
@@ -106,8 +106,8 @@ static int bad_inode_setxattr(struct dentry *dentry, const char *name, | |||
106 | return -EIO; | 106 | return -EIO; |
107 | } | 107 | } |
108 | 108 | ||
109 | static ssize_t bad_inode_getxattr(struct dentry *dentry, const char *name, | 109 | static ssize_t bad_inode_getxattr(struct dentry *dentry, struct inode *inode, |
110 | void *buffer, size_t size) | 110 | const char *name, void *buffer, size_t size) |
111 | { | 111 | { |
112 | return -EIO; | 112 | return -EIO; |
113 | } | 113 | } |
diff --git a/fs/ceph/super.h b/fs/ceph/super.h index e705c4d612d7..beb893bb234f 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h | |||
@@ -795,7 +795,7 @@ extern int ceph_setxattr(struct dentry *, const char *, const void *, | |||
795 | int __ceph_setxattr(struct dentry *, const char *, const void *, size_t, int); | 795 | int __ceph_setxattr(struct dentry *, const char *, const void *, size_t, int); |
796 | ssize_t __ceph_getxattr(struct inode *, const char *, void *, size_t); | 796 | ssize_t __ceph_getxattr(struct inode *, const char *, void *, size_t); |
797 | int __ceph_removexattr(struct dentry *, const char *); | 797 | int __ceph_removexattr(struct dentry *, const char *); |
798 | extern ssize_t ceph_getxattr(struct dentry *, const char *, void *, size_t); | 798 | extern ssize_t ceph_getxattr(struct dentry *, struct inode *, const char *, void *, size_t); |
799 | extern ssize_t ceph_listxattr(struct dentry *, char *, size_t); | 799 | extern ssize_t ceph_listxattr(struct dentry *, char *, size_t); |
800 | extern int ceph_removexattr(struct dentry *, const char *); | 800 | extern int ceph_removexattr(struct dentry *, const char *); |
801 | extern void __ceph_build_xattrs_blob(struct ceph_inode_info *ci); | 801 | extern void __ceph_build_xattrs_blob(struct ceph_inode_info *ci); |
diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c index 9410abdef3ce..c6e917d360f7 100644 --- a/fs/ceph/xattr.c +++ b/fs/ceph/xattr.c | |||
@@ -804,13 +804,13 @@ out: | |||
804 | return err; | 804 | return err; |
805 | } | 805 | } |
806 | 806 | ||
807 | ssize_t ceph_getxattr(struct dentry *dentry, const char *name, void *value, | 807 | ssize_t ceph_getxattr(struct dentry *dentry, struct inode *inode, |
808 | size_t size) | 808 | const char *name, void *value, size_t size) |
809 | { | 809 | { |
810 | if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN)) | 810 | if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN)) |
811 | return generic_getxattr(dentry, name, value, size); | 811 | return generic_getxattr(dentry, inode, name, value, size); |
812 | 812 | ||
813 | return __ceph_getxattr(d_inode(dentry), name, value, size); | 813 | return __ceph_getxattr(inode, name, value, size); |
814 | } | 814 | } |
815 | 815 | ||
816 | ssize_t ceph_listxattr(struct dentry *dentry, char *names, size_t size) | 816 | ssize_t ceph_listxattr(struct dentry *dentry, char *names, size_t size) |
diff --git a/fs/cifs/cifsfs.h b/fs/cifs/cifsfs.h index 83aac8ba50b0..c89ecd7a5c39 100644 --- a/fs/cifs/cifsfs.h +++ b/fs/cifs/cifsfs.h | |||
@@ -123,7 +123,7 @@ extern int cifs_symlink(struct inode *inode, struct dentry *direntry, | |||
123 | extern int cifs_removexattr(struct dentry *, const char *); | 123 | extern int cifs_removexattr(struct dentry *, const char *); |
124 | extern int cifs_setxattr(struct dentry *, const char *, const void *, | 124 | extern int cifs_setxattr(struct dentry *, const char *, const void *, |
125 | size_t, int); | 125 | size_t, int); |
126 | extern ssize_t cifs_getxattr(struct dentry *, const char *, void *, size_t); | 126 | extern ssize_t cifs_getxattr(struct dentry *, struct inode *, const char *, void *, size_t); |
127 | extern ssize_t cifs_listxattr(struct dentry *, char *, size_t); | 127 | extern ssize_t cifs_listxattr(struct dentry *, char *, size_t); |
128 | extern long cifs_ioctl(struct file *filep, unsigned int cmd, unsigned long arg); | 128 | extern long cifs_ioctl(struct file *filep, unsigned int cmd, unsigned long arg); |
129 | #ifdef CONFIG_CIFS_NFSD_EXPORT | 129 | #ifdef CONFIG_CIFS_NFSD_EXPORT |
diff --git a/fs/cifs/xattr.c b/fs/cifs/xattr.c index 159547c8a40b..5d57c85703a9 100644 --- a/fs/cifs/xattr.c +++ b/fs/cifs/xattr.c | |||
@@ -213,8 +213,8 @@ set_ea_exit: | |||
213 | return rc; | 213 | return rc; |
214 | } | 214 | } |
215 | 215 | ||
216 | ssize_t cifs_getxattr(struct dentry *direntry, const char *ea_name, | 216 | ssize_t cifs_getxattr(struct dentry *direntry, struct inode *inode, |
217 | void *ea_value, size_t buf_size) | 217 | const char *ea_name, void *ea_value, size_t buf_size) |
218 | { | 218 | { |
219 | ssize_t rc = -EOPNOTSUPP; | 219 | ssize_t rc = -EOPNOTSUPP; |
220 | #ifdef CONFIG_CIFS_XATTR | 220 | #ifdef CONFIG_CIFS_XATTR |
@@ -296,7 +296,7 @@ ssize_t cifs_getxattr(struct dentry *direntry, const char *ea_name, | |||
296 | goto get_ea_exit; /* rc already EOPNOTSUPP */ | 296 | goto get_ea_exit; /* rc already EOPNOTSUPP */ |
297 | 297 | ||
298 | pacl = pTcon->ses->server->ops->get_acl(cifs_sb, | 298 | pacl = pTcon->ses->server->ops->get_acl(cifs_sb, |
299 | d_inode(direntry), full_path, &acllen); | 299 | inode, full_path, &acllen); |
300 | if (IS_ERR(pacl)) { | 300 | if (IS_ERR(pacl)) { |
301 | rc = PTR_ERR(pacl); | 301 | rc = PTR_ERR(pacl); |
302 | cifs_dbg(VFS, "%s: error %zd getting sec desc\n", | 302 | cifs_dbg(VFS, "%s: error %zd getting sec desc\n", |
diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c index 64026e53722a..543a146ee019 100644 --- a/fs/ecryptfs/crypto.c +++ b/fs/ecryptfs/crypto.c | |||
@@ -1369,7 +1369,9 @@ int ecryptfs_read_xattr_region(char *page_virt, struct inode *ecryptfs_inode) | |||
1369 | ssize_t size; | 1369 | ssize_t size; |
1370 | int rc = 0; | 1370 | int rc = 0; |
1371 | 1371 | ||
1372 | size = ecryptfs_getxattr_lower(lower_dentry, ECRYPTFS_XATTR_NAME, | 1372 | size = ecryptfs_getxattr_lower(lower_dentry, |
1373 | ecryptfs_inode_to_lower(ecryptfs_inode), | ||
1374 | ECRYPTFS_XATTR_NAME, | ||
1373 | page_virt, ECRYPTFS_DEFAULT_EXTENT_SIZE); | 1375 | page_virt, ECRYPTFS_DEFAULT_EXTENT_SIZE); |
1374 | if (size < 0) { | 1376 | if (size < 0) { |
1375 | if (unlikely(ecryptfs_verbosity > 0)) | 1377 | if (unlikely(ecryptfs_verbosity > 0)) |
@@ -1391,6 +1393,7 @@ int ecryptfs_read_and_validate_xattr_region(struct dentry *dentry, | |||
1391 | int rc; | 1393 | int rc; |
1392 | 1394 | ||
1393 | rc = ecryptfs_getxattr_lower(ecryptfs_dentry_to_lower(dentry), | 1395 | rc = ecryptfs_getxattr_lower(ecryptfs_dentry_to_lower(dentry), |
1396 | ecryptfs_inode_to_lower(inode), | ||
1394 | ECRYPTFS_XATTR_NAME, file_size, | 1397 | ECRYPTFS_XATTR_NAME, file_size, |
1395 | ECRYPTFS_SIZE_AND_MARKER_BYTES); | 1398 | ECRYPTFS_SIZE_AND_MARKER_BYTES); |
1396 | if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES) | 1399 | if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES) |
diff --git a/fs/ecryptfs/ecryptfs_kernel.h b/fs/ecryptfs/ecryptfs_kernel.h index d123fbaa28e0..6ff907f73331 100644 --- a/fs/ecryptfs/ecryptfs_kernel.h +++ b/fs/ecryptfs/ecryptfs_kernel.h | |||
@@ -607,8 +607,8 @@ ecryptfs_parse_packet_set(struct ecryptfs_crypt_stat *crypt_stat, | |||
607 | unsigned char *src, struct dentry *ecryptfs_dentry); | 607 | unsigned char *src, struct dentry *ecryptfs_dentry); |
608 | int ecryptfs_truncate(struct dentry *dentry, loff_t new_length); | 608 | int ecryptfs_truncate(struct dentry *dentry, loff_t new_length); |
609 | ssize_t | 609 | ssize_t |
610 | ecryptfs_getxattr_lower(struct dentry *lower_dentry, const char *name, | 610 | ecryptfs_getxattr_lower(struct dentry *lower_dentry, struct inode *lower_inode, |
611 | void *value, size_t size); | 611 | const char *name, void *value, size_t size); |
612 | int | 612 | int |
613 | ecryptfs_setxattr(struct dentry *dentry, const char *name, const void *value, | 613 | ecryptfs_setxattr(struct dentry *dentry, const char *name, const void *value, |
614 | size_t size, int flags); | 614 | size_t size, int flags); |
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c index 121114e9a464..1ac631cd9d84 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c | |||
@@ -1033,29 +1033,30 @@ out: | |||
1033 | } | 1033 | } |
1034 | 1034 | ||
1035 | ssize_t | 1035 | ssize_t |
1036 | ecryptfs_getxattr_lower(struct dentry *lower_dentry, const char *name, | 1036 | ecryptfs_getxattr_lower(struct dentry *lower_dentry, struct inode *lower_inode, |
1037 | void *value, size_t size) | 1037 | const char *name, void *value, size_t size) |
1038 | { | 1038 | { |
1039 | int rc = 0; | 1039 | int rc = 0; |
1040 | 1040 | ||
1041 | if (!d_inode(lower_dentry)->i_op->getxattr) { | 1041 | if (!lower_inode->i_op->getxattr) { |
1042 | rc = -EOPNOTSUPP; | 1042 | rc = -EOPNOTSUPP; |
1043 | goto out; | 1043 | goto out; |
1044 | } | 1044 | } |
1045 | inode_lock(d_inode(lower_dentry)); | 1045 | inode_lock(lower_inode); |
1046 | rc = d_inode(lower_dentry)->i_op->getxattr(lower_dentry, name, value, | 1046 | rc = lower_inode->i_op->getxattr(lower_dentry, lower_inode, |
1047 | size); | 1047 | name, value, size); |
1048 | inode_unlock(d_inode(lower_dentry)); | 1048 | inode_unlock(lower_inode); |
1049 | out: | 1049 | out: |
1050 | return rc; | 1050 | return rc; |
1051 | } | 1051 | } |
1052 | 1052 | ||
1053 | static ssize_t | 1053 | static ssize_t |
1054 | ecryptfs_getxattr(struct dentry *dentry, const char *name, void *value, | 1054 | ecryptfs_getxattr(struct dentry *dentry, struct inode *inode, |
1055 | size_t size) | 1055 | const char *name, void *value, size_t size) |
1056 | { | 1056 | { |
1057 | return ecryptfs_getxattr_lower(ecryptfs_dentry_to_lower(dentry), name, | 1057 | return ecryptfs_getxattr_lower(ecryptfs_dentry_to_lower(dentry), |
1058 | value, size); | 1058 | ecryptfs_inode_to_lower(inode), |
1059 | name, value, size); | ||
1059 | } | 1060 | } |
1060 | 1061 | ||
1061 | static ssize_t | 1062 | static ssize_t |
diff --git a/fs/ecryptfs/mmap.c b/fs/ecryptfs/mmap.c index 1f5865263b3e..39e4381d3a65 100644 --- a/fs/ecryptfs/mmap.c +++ b/fs/ecryptfs/mmap.c | |||
@@ -436,7 +436,8 @@ static int ecryptfs_write_inode_size_to_xattr(struct inode *ecryptfs_inode) | |||
436 | goto out; | 436 | goto out; |
437 | } | 437 | } |
438 | inode_lock(lower_inode); | 438 | inode_lock(lower_inode); |
439 | size = lower_inode->i_op->getxattr(lower_dentry, ECRYPTFS_XATTR_NAME, | 439 | size = lower_inode->i_op->getxattr(lower_dentry, lower_inode, |
440 | ECRYPTFS_XATTR_NAME, | ||
440 | xattr_virt, PAGE_CACHE_SIZE); | 441 | xattr_virt, PAGE_CACHE_SIZE); |
441 | if (size < 0) | 442 | if (size < 0) |
442 | size = 8; | 443 | size = 8; |
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index 4b855b65d457..b618527c05c6 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c | |||
@@ -1759,10 +1759,9 @@ static int fuse_setxattr(struct dentry *entry, const char *name, | |||
1759 | return err; | 1759 | return err; |
1760 | } | 1760 | } |
1761 | 1761 | ||
1762 | static ssize_t fuse_getxattr(struct dentry *entry, const char *name, | 1762 | static ssize_t fuse_getxattr(struct dentry *entry, struct inode *inode, |
1763 | void *value, size_t size) | 1763 | const char *name, void *value, size_t size) |
1764 | { | 1764 | { |
1765 | struct inode *inode = d_inode(entry); | ||
1766 | struct fuse_conn *fc = get_fuse_conn(inode); | 1765 | struct fuse_conn *fc = get_fuse_conn(inode); |
1767 | FUSE_ARGS(args); | 1766 | FUSE_ARGS(args); |
1768 | struct fuse_getxattr_in inarg; | 1767 | struct fuse_getxattr_in inarg; |
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index bb30f9a72c65..45f516cada78 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c | |||
@@ -1968,22 +1968,21 @@ static int gfs2_setxattr(struct dentry *dentry, const char *name, | |||
1968 | return ret; | 1968 | return ret; |
1969 | } | 1969 | } |
1970 | 1970 | ||
1971 | static ssize_t gfs2_getxattr(struct dentry *dentry, const char *name, | 1971 | static ssize_t gfs2_getxattr(struct dentry *dentry, struct inode *inode, |
1972 | void *data, size_t size) | 1972 | const char *name, void *data, size_t size) |
1973 | { | 1973 | { |
1974 | struct inode *inode = d_inode(dentry); | ||
1975 | struct gfs2_inode *ip = GFS2_I(inode); | 1974 | struct gfs2_inode *ip = GFS2_I(inode); |
1976 | struct gfs2_holder gh; | 1975 | struct gfs2_holder gh; |
1977 | int ret; | 1976 | int ret; |
1978 | 1977 | ||
1979 | /* For selinux during lookup */ | 1978 | /* For selinux during lookup */ |
1980 | if (gfs2_glock_is_locked_by_me(ip->i_gl)) | 1979 | if (gfs2_glock_is_locked_by_me(ip->i_gl)) |
1981 | return generic_getxattr(dentry, name, data, size); | 1980 | return generic_getxattr(dentry, inode, name, data, size); |
1982 | 1981 | ||
1983 | gfs2_holder_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &gh); | 1982 | gfs2_holder_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &gh); |
1984 | ret = gfs2_glock_nq(&gh); | 1983 | ret = gfs2_glock_nq(&gh); |
1985 | if (ret == 0) { | 1984 | if (ret == 0) { |
1986 | ret = generic_getxattr(dentry, name, data, size); | 1985 | ret = generic_getxattr(dentry, inode, name, data, size); |
1987 | gfs2_glock_dq(&gh); | 1986 | gfs2_glock_dq(&gh); |
1988 | } | 1987 | } |
1989 | gfs2_holder_uninit(&gh); | 1988 | gfs2_holder_uninit(&gh); |
diff --git a/fs/hfs/attr.c b/fs/hfs/attr.c index 8d931b157bbe..064f92f17efc 100644 --- a/fs/hfs/attr.c +++ b/fs/hfs/attr.c | |||
@@ -56,10 +56,9 @@ out: | |||
56 | return res; | 56 | return res; |
57 | } | 57 | } |
58 | 58 | ||
59 | ssize_t hfs_getxattr(struct dentry *dentry, const char *name, | 59 | ssize_t hfs_getxattr(struct dentry *unused, struct inode *inode, |
60 | void *value, size_t size) | 60 | const char *name, void *value, size_t size) |
61 | { | 61 | { |
62 | struct inode *inode = d_inode(dentry); | ||
63 | struct hfs_find_data fd; | 62 | struct hfs_find_data fd; |
64 | hfs_cat_rec rec; | 63 | hfs_cat_rec rec; |
65 | struct hfs_cat_file *file; | 64 | struct hfs_cat_file *file; |
diff --git a/fs/hfs/hfs_fs.h b/fs/hfs/hfs_fs.h index 1f1c7dcbcc2f..79daa097929a 100644 --- a/fs/hfs/hfs_fs.h +++ b/fs/hfs/hfs_fs.h | |||
@@ -213,8 +213,8 @@ extern void hfs_delete_inode(struct inode *); | |||
213 | /* attr.c */ | 213 | /* attr.c */ |
214 | extern int hfs_setxattr(struct dentry *dentry, const char *name, | 214 | extern int hfs_setxattr(struct dentry *dentry, const char *name, |
215 | const void *value, size_t size, int flags); | 215 | const void *value, size_t size, int flags); |
216 | extern ssize_t hfs_getxattr(struct dentry *dentry, const char *name, | 216 | extern ssize_t hfs_getxattr(struct dentry *dentry, struct inode *inode, |
217 | void *value, size_t size); | 217 | const char *name, void *value, size_t size); |
218 | extern ssize_t hfs_listxattr(struct dentry *dentry, char *buffer, size_t size); | 218 | extern ssize_t hfs_listxattr(struct dentry *dentry, char *buffer, size_t size); |
219 | 219 | ||
220 | /* mdb.c */ | 220 | /* mdb.c */ |
diff --git a/fs/jfs/jfs_xattr.h b/fs/jfs/jfs_xattr.h index e8d717dabca3..e69e14f3777b 100644 --- a/fs/jfs/jfs_xattr.h +++ b/fs/jfs/jfs_xattr.h | |||
@@ -57,7 +57,7 @@ extern int __jfs_setxattr(tid_t, struct inode *, const char *, const void *, | |||
57 | extern int jfs_setxattr(struct dentry *, const char *, const void *, size_t, | 57 | extern int jfs_setxattr(struct dentry *, const char *, const void *, size_t, |
58 | int); | 58 | int); |
59 | extern ssize_t __jfs_getxattr(struct inode *, const char *, void *, size_t); | 59 | extern ssize_t __jfs_getxattr(struct inode *, const char *, void *, size_t); |
60 | extern ssize_t jfs_getxattr(struct dentry *, const char *, void *, size_t); | 60 | extern ssize_t jfs_getxattr(struct dentry *, struct inode *, const char *, void *, size_t); |
61 | extern ssize_t jfs_listxattr(struct dentry *, char *, size_t); | 61 | extern ssize_t jfs_listxattr(struct dentry *, char *, size_t); |
62 | extern int jfs_removexattr(struct dentry *, const char *); | 62 | extern int jfs_removexattr(struct dentry *, const char *); |
63 | 63 | ||
diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c index 48b15a6e5558..5becc6a3ff8c 100644 --- a/fs/jfs/xattr.c +++ b/fs/jfs/xattr.c | |||
@@ -933,8 +933,8 @@ ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data, | |||
933 | return size; | 933 | return size; |
934 | } | 934 | } |
935 | 935 | ||
936 | ssize_t jfs_getxattr(struct dentry *dentry, const char *name, void *data, | 936 | ssize_t jfs_getxattr(struct dentry *dentry, struct inode *inode, |
937 | size_t buf_size) | 937 | const char *name, void *data, size_t buf_size) |
938 | { | 938 | { |
939 | int err; | 939 | int err; |
940 | 940 | ||
@@ -944,7 +944,7 @@ ssize_t jfs_getxattr(struct dentry *dentry, const char *name, void *data, | |||
944 | * for it via sb->s_xattr. | 944 | * for it via sb->s_xattr. |
945 | */ | 945 | */ |
946 | if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN)) | 946 | if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN)) |
947 | return generic_getxattr(dentry, name, data, buf_size); | 947 | return generic_getxattr(dentry, inode, name, data, buf_size); |
948 | 948 | ||
949 | if (strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN) == 0) { | 949 | if (strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN) == 0) { |
950 | /* | 950 | /* |
@@ -959,7 +959,7 @@ ssize_t jfs_getxattr(struct dentry *dentry, const char *name, void *data, | |||
959 | return -EOPNOTSUPP; | 959 | return -EOPNOTSUPP; |
960 | } | 960 | } |
961 | 961 | ||
962 | err = __jfs_getxattr(d_inode(dentry), name, data, buf_size); | 962 | err = __jfs_getxattr(inode, name, data, buf_size); |
963 | 963 | ||
964 | return err; | 964 | return err; |
965 | } | 965 | } |
diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index 16405ae88d2d..b5247226732b 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c | |||
@@ -208,10 +208,10 @@ int kernfs_iop_removexattr(struct dentry *dentry, const char *name) | |||
208 | return simple_xattr_set(&attrs->xattrs, name, NULL, 0, XATTR_REPLACE); | 208 | return simple_xattr_set(&attrs->xattrs, name, NULL, 0, XATTR_REPLACE); |
209 | } | 209 | } |
210 | 210 | ||
211 | ssize_t kernfs_iop_getxattr(struct dentry *dentry, const char *name, void *buf, | 211 | ssize_t kernfs_iop_getxattr(struct dentry *unused, struct inode *inode, |
212 | size_t size) | 212 | const char *name, void *buf, size_t size) |
213 | { | 213 | { |
214 | struct kernfs_node *kn = dentry->d_fsdata; | 214 | struct kernfs_node *kn = inode->i_private; |
215 | struct kernfs_iattrs *attrs; | 215 | struct kernfs_iattrs *attrs; |
216 | 216 | ||
217 | attrs = kernfs_iattrs(kn); | 217 | attrs = kernfs_iattrs(kn); |
diff --git a/fs/kernfs/kernfs-internal.h b/fs/kernfs/kernfs-internal.h index 6762bfbd8207..45c9192c276e 100644 --- a/fs/kernfs/kernfs-internal.h +++ b/fs/kernfs/kernfs-internal.h | |||
@@ -84,8 +84,8 @@ int kernfs_iop_getattr(struct vfsmount *mnt, struct dentry *dentry, | |||
84 | int kernfs_iop_setxattr(struct dentry *dentry, const char *name, const void *value, | 84 | int kernfs_iop_setxattr(struct dentry *dentry, const char *name, const void *value, |
85 | size_t size, int flags); | 85 | size_t size, int flags); |
86 | int kernfs_iop_removexattr(struct dentry *dentry, const char *name); | 86 | int kernfs_iop_removexattr(struct dentry *dentry, const char *name); |
87 | ssize_t kernfs_iop_getxattr(struct dentry *dentry, const char *name, void *buf, | 87 | ssize_t kernfs_iop_getxattr(struct dentry *dentry, struct inode *inode, |
88 | size_t size); | 88 | const char *name, void *buf, size_t size); |
89 | ssize_t kernfs_iop_listxattr(struct dentry *dentry, char *buf, size_t size); | 89 | ssize_t kernfs_iop_listxattr(struct dentry *dentry, char *buf, size_t size); |
90 | 90 | ||
91 | /* | 91 | /* |
diff --git a/fs/libfs.c b/fs/libfs.c index 0ca80b2af420..03332f4bdedf 100644 --- a/fs/libfs.c +++ b/fs/libfs.c | |||
@@ -1127,8 +1127,8 @@ static int empty_dir_setxattr(struct dentry *dentry, const char *name, | |||
1127 | return -EOPNOTSUPP; | 1127 | return -EOPNOTSUPP; |
1128 | } | 1128 | } |
1129 | 1129 | ||
1130 | static ssize_t empty_dir_getxattr(struct dentry *dentry, const char *name, | 1130 | static ssize_t empty_dir_getxattr(struct dentry *dentry, struct inode *inode, |
1131 | void *value, size_t size) | 1131 | const char *name, void *value, size_t size) |
1132 | { | 1132 | { |
1133 | return -EOPNOTSUPP; | 1133 | return -EOPNOTSUPP; |
1134 | } | 1134 | } |
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c index a4ff5d0d7db9..c7b31a03dc9c 100644 --- a/fs/overlayfs/inode.c +++ b/fs/overlayfs/inode.c | |||
@@ -246,8 +246,8 @@ static bool ovl_need_xattr_filter(struct dentry *dentry, | |||
246 | return false; | 246 | return false; |
247 | } | 247 | } |
248 | 248 | ||
249 | ssize_t ovl_getxattr(struct dentry *dentry, const char *name, | 249 | ssize_t ovl_getxattr(struct dentry *dentry, struct inode *inode, |
250 | void *value, size_t size) | 250 | const char *name, void *value, size_t size) |
251 | { | 251 | { |
252 | struct path realpath; | 252 | struct path realpath; |
253 | enum ovl_path_type type = ovl_path_real(dentry, &realpath); | 253 | enum ovl_path_type type = ovl_path_real(dentry, &realpath); |
diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h index 6a7090f4a441..99ec4b035237 100644 --- a/fs/overlayfs/overlayfs.h +++ b/fs/overlayfs/overlayfs.h | |||
@@ -173,8 +173,8 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr); | |||
173 | int ovl_permission(struct inode *inode, int mask); | 173 | int ovl_permission(struct inode *inode, int mask); |
174 | int ovl_setxattr(struct dentry *dentry, const char *name, | 174 | int ovl_setxattr(struct dentry *dentry, const char *name, |
175 | const void *value, size_t size, int flags); | 175 | const void *value, size_t size, int flags); |
176 | ssize_t ovl_getxattr(struct dentry *dentry, const char *name, | 176 | ssize_t ovl_getxattr(struct dentry *dentry, struct inode *inode, |
177 | void *value, size_t size); | 177 | const char *name, void *value, size_t size); |
178 | ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size); | 178 | ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size); |
179 | int ovl_removexattr(struct dentry *dentry, const char *name); | 179 | int ovl_removexattr(struct dentry *dentry, const char *name); |
180 | struct inode *ovl_d_select_inode(struct dentry *dentry, unsigned file_flags); | 180 | struct inode *ovl_d_select_inode(struct dentry *dentry, unsigned file_flags); |
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c index ef64984c9bbc..14cab381cece 100644 --- a/fs/overlayfs/super.c +++ b/fs/overlayfs/super.c | |||
@@ -274,7 +274,7 @@ static bool ovl_is_opaquedir(struct dentry *dentry) | |||
274 | if (!S_ISDIR(inode->i_mode) || !inode->i_op->getxattr) | 274 | if (!S_ISDIR(inode->i_mode) || !inode->i_op->getxattr) |
275 | return false; | 275 | return false; |
276 | 276 | ||
277 | res = inode->i_op->getxattr(dentry, OVL_XATTR_OPAQUE, &val, 1); | 277 | res = inode->i_op->getxattr(dentry, inode, OVL_XATTR_OPAQUE, &val, 1); |
278 | if (res == 1 && val == 'y') | 278 | if (res == 1 && val == 'y') |
279 | return true; | 279 | return true; |
280 | 280 | ||
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h index c2a57e193a81..536fb495f2f1 100644 --- a/fs/ubifs/ubifs.h +++ b/fs/ubifs/ubifs.h | |||
@@ -1734,8 +1734,8 @@ int ubifs_getattr(struct vfsmount *mnt, struct dentry *dentry, | |||
1734 | /* xattr.c */ | 1734 | /* xattr.c */ |
1735 | int ubifs_setxattr(struct dentry *dentry, const char *name, | 1735 | int ubifs_setxattr(struct dentry *dentry, const char *name, |
1736 | const void *value, size_t size, int flags); | 1736 | const void *value, size_t size, int flags); |
1737 | ssize_t ubifs_getxattr(struct dentry *dentry, const char *name, void *buf, | 1737 | ssize_t ubifs_getxattr(struct dentry *dentry, struct inode *host, |
1738 | size_t size); | 1738 | const char *name, void *buf, size_t size); |
1739 | ssize_t ubifs_listxattr(struct dentry *dentry, char *buffer, size_t size); | 1739 | ssize_t ubifs_listxattr(struct dentry *dentry, char *buffer, size_t size); |
1740 | int ubifs_removexattr(struct dentry *dentry, const char *name); | 1740 | int ubifs_removexattr(struct dentry *dentry, const char *name); |
1741 | int ubifs_init_security(struct inode *dentry, struct inode *inode, | 1741 | int ubifs_init_security(struct inode *dentry, struct inode *inode, |
diff --git a/fs/ubifs/xattr.c b/fs/ubifs/xattr.c index b043e044121d..413d650c9476 100644 --- a/fs/ubifs/xattr.c +++ b/fs/ubifs/xattr.c | |||
@@ -372,10 +372,10 @@ int ubifs_setxattr(struct dentry *dentry, const char *name, | |||
372 | return setxattr(d_inode(dentry), name, value, size, flags); | 372 | return setxattr(d_inode(dentry), name, value, size, flags); |
373 | } | 373 | } |
374 | 374 | ||
375 | ssize_t ubifs_getxattr(struct dentry *dentry, const char *name, void *buf, | 375 | ssize_t ubifs_getxattr(struct dentry *dentry, struct inode *host, |
376 | size_t size) | 376 | const char *name, void *buf, size_t size) |
377 | { | 377 | { |
378 | struct inode *inode, *host = d_inode(dentry); | 378 | struct inode *inode; |
379 | struct ubifs_info *c = host->i_sb->s_fs_info; | 379 | struct ubifs_info *c = host->i_sb->s_fs_info; |
380 | struct qstr nm = QSTR_INIT(name, strlen(name)); | 380 | struct qstr nm = QSTR_INIT(name, strlen(name)); |
381 | struct ubifs_inode *ui; | 381 | struct ubifs_inode *ui; |
diff --git a/fs/xattr.c b/fs/xattr.c index 461ba45b7da9..b11945e15fde 100644 --- a/fs/xattr.c +++ b/fs/xattr.c | |||
@@ -192,7 +192,7 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value, | |||
192 | if (!inode->i_op->getxattr) | 192 | if (!inode->i_op->getxattr) |
193 | return -EOPNOTSUPP; | 193 | return -EOPNOTSUPP; |
194 | 194 | ||
195 | error = inode->i_op->getxattr(dentry, name, NULL, 0); | 195 | error = inode->i_op->getxattr(dentry, inode, name, NULL, 0); |
196 | if (error < 0) | 196 | if (error < 0) |
197 | return error; | 197 | return error; |
198 | 198 | ||
@@ -203,7 +203,7 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value, | |||
203 | memset(value, 0, error + 1); | 203 | memset(value, 0, error + 1); |
204 | } | 204 | } |
205 | 205 | ||
206 | error = inode->i_op->getxattr(dentry, name, value, error); | 206 | error = inode->i_op->getxattr(dentry, inode, name, value, error); |
207 | *xattr_value = value; | 207 | *xattr_value = value; |
208 | return error; | 208 | return error; |
209 | } | 209 | } |
@@ -236,7 +236,7 @@ vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) | |||
236 | } | 236 | } |
237 | nolsm: | 237 | nolsm: |
238 | if (inode->i_op->getxattr) | 238 | if (inode->i_op->getxattr) |
239 | error = inode->i_op->getxattr(dentry, name, value, size); | 239 | error = inode->i_op->getxattr(dentry, inode, name, value, size); |
240 | else | 240 | else |
241 | error = -EOPNOTSUPP; | 241 | error = -EOPNOTSUPP; |
242 | 242 | ||
@@ -691,14 +691,15 @@ xattr_resolve_name(const struct xattr_handler **handlers, const char **name) | |||
691 | * Find the handler for the prefix and dispatch its get() operation. | 691 | * Find the handler for the prefix and dispatch its get() operation. |
692 | */ | 692 | */ |
693 | ssize_t | 693 | ssize_t |
694 | generic_getxattr(struct dentry *dentry, const char *name, void *buffer, size_t size) | 694 | generic_getxattr(struct dentry *dentry, struct inode *inode, |
695 | const char *name, void *buffer, size_t size) | ||
695 | { | 696 | { |
696 | const struct xattr_handler *handler; | 697 | const struct xattr_handler *handler; |
697 | 698 | ||
698 | handler = xattr_resolve_name(dentry->d_sb->s_xattr, &name); | 699 | handler = xattr_resolve_name(dentry->d_sb->s_xattr, &name); |
699 | if (IS_ERR(handler)) | 700 | if (IS_ERR(handler)) |
700 | return PTR_ERR(handler); | 701 | return PTR_ERR(handler); |
701 | return handler->get(handler, dentry, d_inode(dentry), | 702 | return handler->get(handler, dentry, inode, |
702 | name, buffer, size); | 703 | name, buffer, size); |
703 | } | 704 | } |
704 | 705 | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index 329ed372d708..1b5fcaeea827 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -1702,7 +1702,8 @@ struct inode_operations { | |||
1702 | int (*setattr) (struct dentry *, struct iattr *); | 1702 | int (*setattr) (struct dentry *, struct iattr *); |
1703 | int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); | 1703 | int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); |
1704 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); | 1704 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); |
1705 | ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t); | 1705 | ssize_t (*getxattr) (struct dentry *, struct inode *, |
1706 | const char *, void *, size_t); | ||
1706 | ssize_t (*listxattr) (struct dentry *, char *, size_t); | 1707 | ssize_t (*listxattr) (struct dentry *, char *, size_t); |
1707 | int (*removexattr) (struct dentry *, const char *); | 1708 | int (*removexattr) (struct dentry *, const char *); |
1708 | int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, | 1709 | int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, |
diff --git a/include/linux/xattr.h b/include/linux/xattr.h index c11c022298b9..1cc4c578deb9 100644 --- a/include/linux/xattr.h +++ b/include/linux/xattr.h | |||
@@ -52,7 +52,7 @@ int __vfs_setxattr_noperm(struct dentry *, const char *, const void *, size_t, i | |||
52 | int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int); | 52 | int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int); |
53 | int vfs_removexattr(struct dentry *, const char *); | 53 | int vfs_removexattr(struct dentry *, const char *); |
54 | 54 | ||
55 | ssize_t generic_getxattr(struct dentry *dentry, const char *name, void *buffer, size_t size); | 55 | ssize_t generic_getxattr(struct dentry *dentry, struct inode *inode, const char *name, void *buffer, size_t size); |
56 | ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size); | 56 | ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size); |
57 | int generic_setxattr(struct dentry *dentry, const char *name, const void *value, size_t size, int flags); | 57 | int generic_setxattr(struct dentry *dentry, const char *name, const void *value, size_t size, int flags); |
58 | int generic_removexattr(struct dentry *dentry, const char *name); | 58 | int generic_removexattr(struct dentry *dentry, const char *name); |
diff --git a/net/socket.c b/net/socket.c index 5f77a8e93830..35e4523edada 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -466,7 +466,7 @@ static struct socket *sockfd_lookup_light(int fd, int *err, int *fput_needed) | |||
466 | #define XATTR_SOCKPROTONAME_SUFFIX "sockprotoname" | 466 | #define XATTR_SOCKPROTONAME_SUFFIX "sockprotoname" |
467 | #define XATTR_NAME_SOCKPROTONAME (XATTR_SYSTEM_PREFIX XATTR_SOCKPROTONAME_SUFFIX) | 467 | #define XATTR_NAME_SOCKPROTONAME (XATTR_SYSTEM_PREFIX XATTR_SOCKPROTONAME_SUFFIX) |
468 | #define XATTR_NAME_SOCKPROTONAME_LEN (sizeof(XATTR_NAME_SOCKPROTONAME)-1) | 468 | #define XATTR_NAME_SOCKPROTONAME_LEN (sizeof(XATTR_NAME_SOCKPROTONAME)-1) |
469 | static ssize_t sockfs_getxattr(struct dentry *dentry, | 469 | static ssize_t sockfs_getxattr(struct dentry *dentry, struct inode *inode, |
470 | const char *name, void *value, size_t size) | 470 | const char *name, void *value, size_t size) |
471 | { | 471 | { |
472 | const char *proto_name; | 472 | const char *proto_name; |
diff --git a/security/commoncap.c b/security/commoncap.c index 48071ed7c445..a042077312a5 100644 --- a/security/commoncap.c +++ b/security/commoncap.c | |||
@@ -313,7 +313,7 @@ int cap_inode_need_killpriv(struct dentry *dentry) | |||
313 | if (!inode->i_op->getxattr) | 313 | if (!inode->i_op->getxattr) |
314 | return 0; | 314 | return 0; |
315 | 315 | ||
316 | error = inode->i_op->getxattr(dentry, XATTR_NAME_CAPS, NULL, 0); | 316 | error = inode->i_op->getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0); |
317 | if (error <= 0) | 317 | if (error <= 0) |
318 | return 0; | 318 | return 0; |
319 | return 1; | 319 | return 1; |
@@ -397,8 +397,8 @@ int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data | |||
397 | if (!inode || !inode->i_op->getxattr) | 397 | if (!inode || !inode->i_op->getxattr) |
398 | return -ENODATA; | 398 | return -ENODATA; |
399 | 399 | ||
400 | size = inode->i_op->getxattr((struct dentry *)dentry, XATTR_NAME_CAPS, &caps, | 400 | size = inode->i_op->getxattr((struct dentry *)dentry, inode, |
401 | XATTR_CAPS_SZ); | 401 | XATTR_NAME_CAPS, &caps, XATTR_CAPS_SZ); |
402 | if (size == -ENODATA || size == -EOPNOTSUPP) | 402 | if (size == -ENODATA || size == -EOPNOTSUPP) |
403 | /* no data, that's ok */ | 403 | /* no data, that's ok */ |
404 | return -ENODATA; | 404 | return -ENODATA; |
diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c index 84c6d11fc096..b9e26288d30c 100644 --- a/security/integrity/evm/evm_main.c +++ b/security/integrity/evm/evm_main.c | |||
@@ -82,7 +82,7 @@ static int evm_find_protected_xattrs(struct dentry *dentry) | |||
82 | return -EOPNOTSUPP; | 82 | return -EOPNOTSUPP; |
83 | 83 | ||
84 | for (xattr = evm_config_xattrnames; *xattr != NULL; xattr++) { | 84 | for (xattr = evm_config_xattrnames; *xattr != NULL; xattr++) { |
85 | error = inode->i_op->getxattr(dentry, *xattr, NULL, 0); | 85 | error = inode->i_op->getxattr(dentry, inode, *xattr, NULL, 0); |
86 | if (error < 0) { | 86 | if (error < 0) { |
87 | if (error == -ENODATA) | 87 | if (error == -ENODATA) |
88 | continue; | 88 | continue; |
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 889cd59ca5a7..469f5c75bd4b 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c | |||
@@ -506,7 +506,8 @@ static int sb_finish_set_opts(struct super_block *sb) | |||
506 | rc = -EOPNOTSUPP; | 506 | rc = -EOPNOTSUPP; |
507 | goto out; | 507 | goto out; |
508 | } | 508 | } |
509 | rc = root_inode->i_op->getxattr(root, XATTR_NAME_SELINUX, NULL, 0); | 509 | rc = root_inode->i_op->getxattr(root, root_inode, |
510 | XATTR_NAME_SELINUX, NULL, 0); | ||
510 | if (rc < 0 && rc != -ENODATA) { | 511 | if (rc < 0 && rc != -ENODATA) { |
511 | if (rc == -EOPNOTSUPP) | 512 | if (rc == -EOPNOTSUPP) |
512 | printk(KERN_WARNING "SELinux: (dev %s, type " | 513 | printk(KERN_WARNING "SELinux: (dev %s, type " |
@@ -1412,13 +1413,13 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent | |||
1412 | goto out_unlock; | 1413 | goto out_unlock; |
1413 | } | 1414 | } |
1414 | context[len] = '\0'; | 1415 | context[len] = '\0'; |
1415 | rc = inode->i_op->getxattr(dentry, XATTR_NAME_SELINUX, | 1416 | rc = inode->i_op->getxattr(dentry, inode, XATTR_NAME_SELINUX, |
1416 | context, len); | 1417 | context, len); |
1417 | if (rc == -ERANGE) { | 1418 | if (rc == -ERANGE) { |
1418 | kfree(context); | 1419 | kfree(context); |
1419 | 1420 | ||
1420 | /* Need a larger buffer. Query for the right size. */ | 1421 | /* Need a larger buffer. Query for the right size. */ |
1421 | rc = inode->i_op->getxattr(dentry, XATTR_NAME_SELINUX, | 1422 | rc = inode->i_op->getxattr(dentry, inode, XATTR_NAME_SELINUX, |
1422 | NULL, 0); | 1423 | NULL, 0); |
1423 | if (rc < 0) { | 1424 | if (rc < 0) { |
1424 | dput(dentry); | 1425 | dput(dentry); |
@@ -1432,7 +1433,7 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent | |||
1432 | goto out_unlock; | 1433 | goto out_unlock; |
1433 | } | 1434 | } |
1434 | context[len] = '\0'; | 1435 | context[len] = '\0'; |
1435 | rc = inode->i_op->getxattr(dentry, | 1436 | rc = inode->i_op->getxattr(dentry, inode, |
1436 | XATTR_NAME_SELINUX, | 1437 | XATTR_NAME_SELINUX, |
1437 | context, len); | 1438 | context, len); |
1438 | } | 1439 | } |
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 50bcca26c0b7..ff2b8c3cf7a9 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c | |||
@@ -272,7 +272,7 @@ static struct smack_known *smk_fetch(const char *name, struct inode *ip, | |||
272 | if (buffer == NULL) | 272 | if (buffer == NULL) |
273 | return ERR_PTR(-ENOMEM); | 273 | return ERR_PTR(-ENOMEM); |
274 | 274 | ||
275 | rc = ip->i_op->getxattr(dp, name, buffer, SMK_LONGLABEL); | 275 | rc = ip->i_op->getxattr(dp, ip, name, buffer, SMK_LONGLABEL); |
276 | if (rc < 0) | 276 | if (rc < 0) |
277 | skp = ERR_PTR(rc); | 277 | skp = ERR_PTR(rc); |
278 | else if (rc == 0) | 278 | else if (rc == 0) |
@@ -3519,7 +3519,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode) | |||
3519 | TRANS_TRUE, TRANS_TRUE_SIZE, | 3519 | TRANS_TRUE, TRANS_TRUE_SIZE, |
3520 | 0); | 3520 | 0); |
3521 | } else { | 3521 | } else { |
3522 | rc = inode->i_op->getxattr(dp, | 3522 | rc = inode->i_op->getxattr(dp, inode, |
3523 | XATTR_NAME_SMACKTRANSMUTE, trattr, | 3523 | XATTR_NAME_SMACKTRANSMUTE, trattr, |
3524 | TRANS_TRUE_SIZE); | 3524 | TRANS_TRUE_SIZE); |
3525 | if (rc >= 0 && strncmp(trattr, TRANS_TRUE, | 3525 | if (rc >= 0 && strncmp(trattr, TRANS_TRUE, |