Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
ce23e640
Commit
ce23e640
authored
Apr 11, 2016
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
->getxattr(): pass dentry and inode as separate arguments
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
b296821a
Changes
34
Hide whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
94 additions
and
85 deletions
+94
-85
Documentation/filesystems/porting
Documentation/filesystems/porting
+6
-0
drivers/staging/lustre/lustre/llite/llite_internal.h
drivers/staging/lustre/lustre/llite/llite_internal.h
+2
-2
drivers/staging/lustre/lustre/llite/xattr.c
drivers/staging/lustre/lustre/llite/xattr.c
+2
-4
fs/bad_inode.c
fs/bad_inode.c
+2
-2
fs/ceph/super.h
fs/ceph/super.h
+1
-1
fs/ceph/xattr.c
fs/ceph/xattr.c
+4
-4
fs/cifs/cifsfs.h
fs/cifs/cifsfs.h
+1
-1
fs/cifs/xattr.c
fs/cifs/xattr.c
+3
-3
fs/ecryptfs/crypto.c
fs/ecryptfs/crypto.c
+4
-1
fs/ecryptfs/ecryptfs_kernel.h
fs/ecryptfs/ecryptfs_kernel.h
+2
-2
fs/ecryptfs/inode.c
fs/ecryptfs/inode.c
+12
-11
fs/ecryptfs/mmap.c
fs/ecryptfs/mmap.c
+2
-1
fs/fuse/dir.c
fs/fuse/dir.c
+2
-3
fs/gfs2/inode.c
fs/gfs2/inode.c
+4
-5
fs/hfs/attr.c
fs/hfs/attr.c
+2
-3
fs/hfs/hfs_fs.h
fs/hfs/hfs_fs.h
+2
-2
fs/jfs/jfs_xattr.h
fs/jfs/jfs_xattr.h
+1
-1
fs/jfs/xattr.c
fs/jfs/xattr.c
+4
-4
fs/kernfs/inode.c
fs/kernfs/inode.c
+3
-3
fs/kernfs/kernfs-internal.h
fs/kernfs/kernfs-internal.h
+2
-2
fs/libfs.c
fs/libfs.c
+2
-2
fs/overlayfs/inode.c
fs/overlayfs/inode.c
+2
-2
fs/overlayfs/overlayfs.h
fs/overlayfs/overlayfs.h
+2
-2
fs/overlayfs/super.c
fs/overlayfs/super.c
+1
-1
fs/ubifs/ubifs.h
fs/ubifs/ubifs.h
+2
-2
fs/ubifs/xattr.c
fs/ubifs/xattr.c
+3
-3
fs/xattr.c
fs/xattr.c
+6
-5
include/linux/fs.h
include/linux/fs.h
+2
-1
include/linux/xattr.h
include/linux/xattr.h
+1
-1
net/socket.c
net/socket.c
+1
-1
security/commoncap.c
security/commoncap.c
+3
-3
security/integrity/evm/evm_main.c
security/integrity/evm/evm_main.c
+1
-1
security/selinux/hooks.c
security/selinux/hooks.c
+5
-4
security/smack/smack_lsm.c
security/smack/smack_lsm.c
+2
-2
No files found.
Documentation/filesystems/porting
View file @
ce23e640
...
...
@@ -525,3 +525,9 @@ in your dentry operations instead.
set_delayed_call() where it used to set *cookie.
->put_link() is gone - just give the destructor to set_delayed_call()
in ->get_link().
--
[mandatory]
->getxattr() and xattr_handler.get() get dentry and inode passed separately.
dentry might be yet to be attached to inode, so do _not_ use its ->d_inode
in the instances. Rationale: !@#!@# security_d_instantiate() needs to be
called before we attach dentry to inode.
drivers/staging/lustre/lustre/llite/llite_internal.h
View file @
ce23e640
...
...
@@ -1042,8 +1042,8 @@ static inline __u64 ll_file_maxbytes(struct inode *inode)
/* llite/xattr.c */
int
ll_setxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
const
void
*
value
,
size_t
size
,
int
flags
);
ssize_t
ll_getxattr
(
struct
dentry
*
dentry
,
const
char
*
nam
e
,
void
*
buffer
,
size_t
size
);
ssize_t
ll_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inod
e
,
const
char
*
name
,
void
*
buffer
,
size_t
size
);
ssize_t
ll_listxattr
(
struct
dentry
*
dentry
,
char
*
buffer
,
size_t
size
);
int
ll_removexattr
(
struct
dentry
*
dentry
,
const
char
*
name
);
...
...
drivers/staging/lustre/lustre/llite/xattr.c
View file @
ce23e640
...
...
@@ -451,11 +451,9 @@ int ll_getxattr_common(struct inode *inode, const char *name,
return
rc
;
}
ssize_t
ll_getxattr
(
struct
dentry
*
dentry
,
const
char
*
nam
e
,
void
*
buffer
,
size_t
size
)
ssize_t
ll_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inod
e
,
const
char
*
name
,
void
*
buffer
,
size_t
size
)
{
struct
inode
*
inode
=
d_inode
(
dentry
);
LASSERT
(
inode
);
LASSERT
(
name
);
...
...
fs/bad_inode.c
View file @
ce23e640
...
...
@@ -106,8 +106,8 @@ static int bad_inode_setxattr(struct dentry *dentry, const char *name,
return
-
EIO
;
}
static
ssize_t
bad_inode_getxattr
(
struct
dentry
*
dentry
,
const
char
*
nam
e
,
void
*
buffer
,
size_t
size
)
static
ssize_t
bad_inode_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inod
e
,
const
char
*
name
,
void
*
buffer
,
size_t
size
)
{
return
-
EIO
;
}
...
...
fs/ceph/super.h
View file @
ce23e640
...
...
@@ -795,7 +795,7 @@ extern int ceph_setxattr(struct dentry *, const char *, const void *,
int
__ceph_setxattr
(
struct
dentry
*
,
const
char
*
,
const
void
*
,
size_t
,
int
);
ssize_t
__ceph_getxattr
(
struct
inode
*
,
const
char
*
,
void
*
,
size_t
);
int
__ceph_removexattr
(
struct
dentry
*
,
const
char
*
);
extern
ssize_t
ceph_getxattr
(
struct
dentry
*
,
const
char
*
,
void
*
,
size_t
);
extern
ssize_t
ceph_getxattr
(
struct
dentry
*
,
struct
inode
*
,
const
char
*
,
void
*
,
size_t
);
extern
ssize_t
ceph_listxattr
(
struct
dentry
*
,
char
*
,
size_t
);
extern
int
ceph_removexattr
(
struct
dentry
*
,
const
char
*
);
extern
void
__ceph_build_xattrs_blob
(
struct
ceph_inode_info
*
ci
);
...
...
fs/ceph/xattr.c
View file @
ce23e640
...
...
@@ -804,13 +804,13 @@ ssize_t __ceph_getxattr(struct inode *inode, const char *name, void *value,
return
err
;
}
ssize_t
ceph_getxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
void
*
valu
e
,
size_t
size
)
ssize_t
ceph_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inod
e
,
const
char
*
name
,
void
*
value
,
size_t
size
)
{
if
(
!
strncmp
(
name
,
XATTR_SYSTEM_PREFIX
,
XATTR_SYSTEM_PREFIX_LEN
))
return
generic_getxattr
(
dentry
,
name
,
value
,
size
);
return
generic_getxattr
(
dentry
,
inode
,
name
,
value
,
size
);
return
__ceph_getxattr
(
d_inode
(
dentry
)
,
name
,
value
,
size
);
return
__ceph_getxattr
(
inode
,
name
,
value
,
size
);
}
ssize_t
ceph_listxattr
(
struct
dentry
*
dentry
,
char
*
names
,
size_t
size
)
...
...
fs/cifs/cifsfs.h
View file @
ce23e640
...
...
@@ -123,7 +123,7 @@ extern int cifs_symlink(struct inode *inode, struct dentry *direntry,
extern
int
cifs_removexattr
(
struct
dentry
*
,
const
char
*
);
extern
int
cifs_setxattr
(
struct
dentry
*
,
const
char
*
,
const
void
*
,
size_t
,
int
);
extern
ssize_t
cifs_getxattr
(
struct
dentry
*
,
const
char
*
,
void
*
,
size_t
);
extern
ssize_t
cifs_getxattr
(
struct
dentry
*
,
struct
inode
*
,
const
char
*
,
void
*
,
size_t
);
extern
ssize_t
cifs_listxattr
(
struct
dentry
*
,
char
*
,
size_t
);
extern
long
cifs_ioctl
(
struct
file
*
filep
,
unsigned
int
cmd
,
unsigned
long
arg
);
#ifdef CONFIG_CIFS_NFSD_EXPORT
...
...
fs/cifs/xattr.c
View file @
ce23e640
...
...
@@ -213,8 +213,8 @@ int cifs_setxattr(struct dentry *direntry, const char *ea_name,
return
rc
;
}
ssize_t
cifs_getxattr
(
struct
dentry
*
direntry
,
const
char
*
ea_nam
e
,
void
*
ea_value
,
size_t
buf_size
)
ssize_t
cifs_getxattr
(
struct
dentry
*
direntry
,
struct
inode
*
inod
e
,
const
char
*
ea_name
,
void
*
ea_value
,
size_t
buf_size
)
{
ssize_t
rc
=
-
EOPNOTSUPP
;
#ifdef CONFIG_CIFS_XATTR
...
...
@@ -296,7 +296,7 @@ ssize_t cifs_getxattr(struct dentry *direntry, const char *ea_name,
goto
get_ea_exit
;
/* rc already EOPNOTSUPP */
pacl
=
pTcon
->
ses
->
server
->
ops
->
get_acl
(
cifs_sb
,
d_inode
(
direntry
)
,
full_path
,
&
acllen
);
inode
,
full_path
,
&
acllen
);
if
(
IS_ERR
(
pacl
))
{
rc
=
PTR_ERR
(
pacl
);
cifs_dbg
(
VFS
,
"%s: error %zd getting sec desc
\n
"
,
...
...
fs/ecryptfs/crypto.c
View file @
ce23e640
...
...
@@ -1369,7 +1369,9 @@ int ecryptfs_read_xattr_region(char *page_virt, struct inode *ecryptfs_inode)
ssize_t
size
;
int
rc
=
0
;
size
=
ecryptfs_getxattr_lower
(
lower_dentry
,
ECRYPTFS_XATTR_NAME
,
size
=
ecryptfs_getxattr_lower
(
lower_dentry
,
ecryptfs_inode_to_lower
(
ecryptfs_inode
),
ECRYPTFS_XATTR_NAME
,
page_virt
,
ECRYPTFS_DEFAULT_EXTENT_SIZE
);
if
(
size
<
0
)
{
if
(
unlikely
(
ecryptfs_verbosity
>
0
))
...
...
@@ -1391,6 +1393,7 @@ int ecryptfs_read_and_validate_xattr_region(struct dentry *dentry,
int
rc
;
rc
=
ecryptfs_getxattr_lower
(
ecryptfs_dentry_to_lower
(
dentry
),
ecryptfs_inode_to_lower
(
inode
),
ECRYPTFS_XATTR_NAME
,
file_size
,
ECRYPTFS_SIZE_AND_MARKER_BYTES
);
if
(
rc
<
ECRYPTFS_SIZE_AND_MARKER_BYTES
)
...
...
fs/ecryptfs/ecryptfs_kernel.h
View file @
ce23e640
...
...
@@ -607,8 +607,8 @@ ecryptfs_parse_packet_set(struct ecryptfs_crypt_stat *crypt_stat,
unsigned
char
*
src
,
struct
dentry
*
ecryptfs_dentry
);
int
ecryptfs_truncate
(
struct
dentry
*
dentry
,
loff_t
new_length
);
ssize_t
ecryptfs_getxattr_lower
(
struct
dentry
*
lower_dentry
,
const
char
*
nam
e
,
void
*
value
,
size_t
size
);
ecryptfs_getxattr_lower
(
struct
dentry
*
lower_dentry
,
struct
inode
*
lower_inod
e
,
const
char
*
name
,
void
*
value
,
size_t
size
);
int
ecryptfs_setxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
const
void
*
value
,
size_t
size
,
int
flags
);
...
...
fs/ecryptfs/inode.c
View file @
ce23e640
...
...
@@ -1033,29 +1033,30 @@ ecryptfs_setxattr(struct dentry *dentry, const char *name, const void *value,
}
ssize_t
ecryptfs_getxattr_lower
(
struct
dentry
*
lower_dentry
,
const
char
*
nam
e
,
void
*
value
,
size_t
size
)
ecryptfs_getxattr_lower
(
struct
dentry
*
lower_dentry
,
struct
inode
*
lower_inod
e
,
const
char
*
name
,
void
*
value
,
size_t
size
)
{
int
rc
=
0
;
if
(
!
d_inode
(
lower_dentry
)
->
i_op
->
getxattr
)
{
if
(
!
lower_inode
->
i_op
->
getxattr
)
{
rc
=
-
EOPNOTSUPP
;
goto
out
;
}
inode_lock
(
d_inode
(
lower_dentry
)
);
rc
=
d_inode
(
lower_dentry
)
->
i_op
->
getxattr
(
lower_dentry
,
name
,
valu
e
,
size
);
inode_unlock
(
d_inode
(
lower_dentry
)
);
inode_lock
(
lower_inode
);
rc
=
lower_inode
->
i_op
->
getxattr
(
lower_dentry
,
lower_inod
e
,
name
,
value
,
size
);
inode_unlock
(
lower_inode
);
out:
return
rc
;
}
static
ssize_t
ecryptfs_getxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
void
*
valu
e
,
size_t
size
)
ecryptfs_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inod
e
,
const
char
*
name
,
void
*
value
,
size_t
size
)
{
return
ecryptfs_getxattr_lower
(
ecryptfs_dentry_to_lower
(
dentry
),
name
,
value
,
size
);
return
ecryptfs_getxattr_lower
(
ecryptfs_dentry_to_lower
(
dentry
),
ecryptfs_inode_to_lower
(
inode
),
name
,
value
,
size
);
}
static
ssize_t
...
...
fs/ecryptfs/mmap.c
View file @
ce23e640
...
...
@@ -436,7 +436,8 @@ static int ecryptfs_write_inode_size_to_xattr(struct inode *ecryptfs_inode)
goto
out
;
}
inode_lock
(
lower_inode
);
size
=
lower_inode
->
i_op
->
getxattr
(
lower_dentry
,
ECRYPTFS_XATTR_NAME
,
size
=
lower_inode
->
i_op
->
getxattr
(
lower_dentry
,
lower_inode
,
ECRYPTFS_XATTR_NAME
,
xattr_virt
,
PAGE_CACHE_SIZE
);
if
(
size
<
0
)
size
=
8
;
...
...
fs/fuse/dir.c
View file @
ce23e640
...
...
@@ -1759,10 +1759,9 @@ static int fuse_setxattr(struct dentry *entry, const char *name,
return
err
;
}
static
ssize_t
fuse_getxattr
(
struct
dentry
*
entry
,
const
char
*
nam
e
,
void
*
value
,
size_t
size
)
static
ssize_t
fuse_getxattr
(
struct
dentry
*
entry
,
struct
inode
*
inod
e
,
const
char
*
name
,
void
*
value
,
size_t
size
)
{
struct
inode
*
inode
=
d_inode
(
entry
);
struct
fuse_conn
*
fc
=
get_fuse_conn
(
inode
);
FUSE_ARGS
(
args
);
struct
fuse_getxattr_in
inarg
;
...
...
fs/gfs2/inode.c
View file @
ce23e640
...
...
@@ -1968,22 +1968,21 @@ static int gfs2_setxattr(struct dentry *dentry, const char *name,
return
ret
;
}
static
ssize_t
gfs2_getxattr
(
struct
dentry
*
dentry
,
const
char
*
nam
e
,
void
*
data
,
size_t
size
)
static
ssize_t
gfs2_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inod
e
,
const
char
*
name
,
void
*
data
,
size_t
size
)
{
struct
inode
*
inode
=
d_inode
(
dentry
);
struct
gfs2_inode
*
ip
=
GFS2_I
(
inode
);
struct
gfs2_holder
gh
;
int
ret
;
/* For selinux during lookup */
if
(
gfs2_glock_is_locked_by_me
(
ip
->
i_gl
))
return
generic_getxattr
(
dentry
,
name
,
data
,
size
);
return
generic_getxattr
(
dentry
,
inode
,
name
,
data
,
size
);
gfs2_holder_init
(
ip
->
i_gl
,
LM_ST_SHARED
,
LM_FLAG_ANY
,
&
gh
);
ret
=
gfs2_glock_nq
(
&
gh
);
if
(
ret
==
0
)
{
ret
=
generic_getxattr
(
dentry
,
name
,
data
,
size
);
ret
=
generic_getxattr
(
dentry
,
inode
,
name
,
data
,
size
);
gfs2_glock_dq
(
&
gh
);
}
gfs2_holder_uninit
(
&
gh
);
...
...
fs/hfs/attr.c
View file @
ce23e640
...
...
@@ -56,10 +56,9 @@ int hfs_setxattr(struct dentry *dentry, const char *name,
return
res
;
}
ssize_t
hfs_getxattr
(
struct
dentry
*
dentry
,
const
char
*
nam
e
,
void
*
value
,
size_t
size
)
ssize_t
hfs_getxattr
(
struct
dentry
*
unused
,
struct
inode
*
inod
e
,
const
char
*
name
,
void
*
value
,
size_t
size
)
{
struct
inode
*
inode
=
d_inode
(
dentry
);
struct
hfs_find_data
fd
;
hfs_cat_rec
rec
;
struct
hfs_cat_file
*
file
;
...
...
fs/hfs/hfs_fs.h
View file @
ce23e640
...
...
@@ -213,8 +213,8 @@ extern void hfs_delete_inode(struct inode *);
/* attr.c */
extern
int
hfs_setxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
const
void
*
value
,
size_t
size
,
int
flags
);
extern
ssize_t
hfs_getxattr
(
struct
dentry
*
dentry
,
const
char
*
nam
e
,
void
*
value
,
size_t
size
);
extern
ssize_t
hfs_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inod
e
,
const
char
*
name
,
void
*
value
,
size_t
size
);
extern
ssize_t
hfs_listxattr
(
struct
dentry
*
dentry
,
char
*
buffer
,
size_t
size
);
/* mdb.c */
...
...
fs/jfs/jfs_xattr.h
View file @
ce23e640
...
...
@@ -57,7 +57,7 @@ extern int __jfs_setxattr(tid_t, struct inode *, const char *, const void *,
extern
int
jfs_setxattr
(
struct
dentry
*
,
const
char
*
,
const
void
*
,
size_t
,
int
);
extern
ssize_t
__jfs_getxattr
(
struct
inode
*
,
const
char
*
,
void
*
,
size_t
);
extern
ssize_t
jfs_getxattr
(
struct
dentry
*
,
const
char
*
,
void
*
,
size_t
);
extern
ssize_t
jfs_getxattr
(
struct
dentry
*
,
struct
inode
*
,
const
char
*
,
void
*
,
size_t
);
extern
ssize_t
jfs_listxattr
(
struct
dentry
*
,
char
*
,
size_t
);
extern
int
jfs_removexattr
(
struct
dentry
*
,
const
char
*
);
...
...
fs/jfs/xattr.c
View file @
ce23e640
...
...
@@ -933,8 +933,8 @@ ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data,
return
size
;
}
ssize_t
jfs_getxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
void
*
data
,
size_t
buf_size
)
ssize_t
jfs_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inode
,
const
char
*
name
,
void
*
data
,
size_t
buf_size
)
{
int
err
;
...
...
@@ -944,7 +944,7 @@ ssize_t jfs_getxattr(struct dentry *dentry, const char *name, void *data,
* for it via sb->s_xattr.
*/
if
(
!
strncmp
(
name
,
XATTR_SYSTEM_PREFIX
,
XATTR_SYSTEM_PREFIX_LEN
))
return
generic_getxattr
(
dentry
,
name
,
data
,
buf_size
);
return
generic_getxattr
(
dentry
,
inode
,
name
,
data
,
buf_size
);
if
(
strncmp
(
name
,
XATTR_OS2_PREFIX
,
XATTR_OS2_PREFIX_LEN
)
==
0
)
{
/*
...
...
@@ -959,7 +959,7 @@ ssize_t jfs_getxattr(struct dentry *dentry, const char *name, void *data,
return
-
EOPNOTSUPP
;
}
err
=
__jfs_getxattr
(
d_inode
(
dentry
)
,
name
,
data
,
buf_size
);
err
=
__jfs_getxattr
(
inode
,
name
,
data
,
buf_size
);
return
err
;
}
...
...
fs/kernfs/inode.c
View file @
ce23e640
...
...
@@ -208,10 +208,10 @@ int kernfs_iop_removexattr(struct dentry *dentry, const char *name)
return
simple_xattr_set
(
&
attrs
->
xattrs
,
name
,
NULL
,
0
,
XATTR_REPLACE
);
}
ssize_t
kernfs_iop_getxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
void
*
buf
,
size_t
size
)
ssize_t
kernfs_iop_getxattr
(
struct
dentry
*
unused
,
struct
inode
*
inode
,
const
char
*
name
,
void
*
buf
,
size_t
size
)
{
struct
kernfs_node
*
kn
=
dentry
->
d_fsdata
;
struct
kernfs_node
*
kn
=
inode
->
i_private
;
struct
kernfs_iattrs
*
attrs
;
attrs
=
kernfs_iattrs
(
kn
);
...
...
fs/kernfs/kernfs-internal.h
View file @
ce23e640
...
...
@@ -84,8 +84,8 @@ int kernfs_iop_getattr(struct vfsmount *mnt, struct dentry *dentry,
int
kernfs_iop_setxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
const
void
*
value
,
size_t
size
,
int
flags
);
int
kernfs_iop_removexattr
(
struct
dentry
*
dentry
,
const
char
*
name
);
ssize_t
kernfs_iop_getxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
void
*
buf
,
size_t
size
);
ssize_t
kernfs_iop_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inode
,
const
char
*
name
,
void
*
buf
,
size_t
size
);
ssize_t
kernfs_iop_listxattr
(
struct
dentry
*
dentry
,
char
*
buf
,
size_t
size
);
/*
...
...
fs/libfs.c
View file @
ce23e640
...
...
@@ -1127,8 +1127,8 @@ static int empty_dir_setxattr(struct dentry *dentry, const char *name,
return
-
EOPNOTSUPP
;
}
static
ssize_t
empty_dir_getxattr
(
struct
dentry
*
dentry
,
const
char
*
nam
e
,
void
*
value
,
size_t
size
)
static
ssize_t
empty_dir_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inod
e
,
const
char
*
name
,
void
*
value
,
size_t
size
)
{
return
-
EOPNOTSUPP
;
}
...
...
fs/overlayfs/inode.c
View file @
ce23e640
...
...
@@ -246,8 +246,8 @@ static bool ovl_need_xattr_filter(struct dentry *dentry,
return
false
;
}
ssize_t
ovl_getxattr
(
struct
dentry
*
dentry
,
const
char
*
nam
e
,
void
*
value
,
size_t
size
)
ssize_t
ovl_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inod
e
,
const
char
*
name
,
void
*
value
,
size_t
size
)
{
struct
path
realpath
;
enum
ovl_path_type
type
=
ovl_path_real
(
dentry
,
&
realpath
);
...
...
fs/overlayfs/overlayfs.h
View file @
ce23e640
...
...
@@ -173,8 +173,8 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr);
int
ovl_permission
(
struct
inode
*
inode
,
int
mask
);
int
ovl_setxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
const
void
*
value
,
size_t
size
,
int
flags
);
ssize_t
ovl_getxattr
(
struct
dentry
*
dentry
,
const
char
*
nam
e
,
void
*
value
,
size_t
size
);
ssize_t
ovl_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inod
e
,
const
char
*
name
,
void
*
value
,
size_t
size
);
ssize_t
ovl_listxattr
(
struct
dentry
*
dentry
,
char
*
list
,
size_t
size
);
int
ovl_removexattr
(
struct
dentry
*
dentry
,
const
char
*
name
);
struct
inode
*
ovl_d_select_inode
(
struct
dentry
*
dentry
,
unsigned
file_flags
);
...
...
fs/overlayfs/super.c
View file @
ce23e640
...
...
@@ -274,7 +274,7 @@ static bool ovl_is_opaquedir(struct dentry *dentry)
if
(
!
S_ISDIR
(
inode
->
i_mode
)
||
!
inode
->
i_op
->
getxattr
)
return
false
;
res
=
inode
->
i_op
->
getxattr
(
dentry
,
OVL_XATTR_OPAQUE
,
&
val
,
1
);
res
=
inode
->
i_op
->
getxattr
(
dentry
,
inode
,
OVL_XATTR_OPAQUE
,
&
val
,
1
);
if
(
res
==
1
&&
val
==
'y'
)
return
true
;
...
...
fs/ubifs/ubifs.h
View file @
ce23e640
...
...
@@ -1734,8 +1734,8 @@ int ubifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
/* xattr.c */
int
ubifs_setxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
const
void
*
value
,
size_t
size
,
int
flags
);
ssize_t
ubifs_getxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
void
*
buf
,
size_t
size
);
ssize_t
ubifs_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
host
,
const
char
*
name
,
void
*
buf
,
size_t
size
);
ssize_t
ubifs_listxattr
(
struct
dentry
*
dentry
,
char
*
buffer
,
size_t
size
);
int
ubifs_removexattr
(
struct
dentry
*
dentry
,
const
char
*
name
);
int
ubifs_init_security
(
struct
inode
*
dentry
,
struct
inode
*
inode
,
...
...
fs/ubifs/xattr.c
View file @
ce23e640
...
...
@@ -372,10 +372,10 @@ int ubifs_setxattr(struct dentry *dentry, const char *name,
return
setxattr
(
d_inode
(
dentry
),
name
,
value
,
size
,
flags
);
}
ssize_t
ubifs_getxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
void
*
buf
,
size_t
size
)
ssize_t
ubifs_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
host
,
const
char
*
name
,
void
*
buf
,
size_t
size
)
{
struct
inode
*
inode
,
*
host
=
d_inode
(
dentry
)
;
struct
inode
*
inode
;
struct
ubifs_info
*
c
=
host
->
i_sb
->
s_fs_info
;
struct
qstr
nm
=
QSTR_INIT
(
name
,
strlen
(
name
));
struct
ubifs_inode
*
ui
;
...
...
fs/xattr.c
View file @
ce23e640
...
...
@@ -192,7 +192,7 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value,
if
(
!
inode
->
i_op
->
getxattr
)
return
-
EOPNOTSUPP
;
error
=
inode
->
i_op
->
getxattr
(
dentry
,
name
,
NULL
,
0
);
error
=
inode
->
i_op
->
getxattr
(
dentry
,
inode
,
name
,
NULL
,
0
);
if
(
error
<
0
)
return
error
;
...
...
@@ -203,7 +203,7 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value,
memset
(
value
,
0
,
error
+
1
);
}
error
=
inode
->
i_op
->
getxattr
(
dentry
,
name
,
value
,
error
);
error
=
inode
->
i_op
->
getxattr
(
dentry
,
inode
,
name
,
value
,
error
);
*
xattr_value
=
value
;
return
error
;
}
...
...
@@ -236,7 +236,7 @@ vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
}
nolsm:
if
(
inode
->
i_op
->
getxattr
)
error
=
inode
->
i_op
->
getxattr
(
dentry
,
name
,
value
,
size
);
error
=
inode
->
i_op
->
getxattr
(
dentry
,
inode
,
name
,
value
,
size
);
else
error
=
-
EOPNOTSUPP
;
...
...
@@ -691,14 +691,15 @@ xattr_resolve_name(const struct xattr_handler **handlers, const char **name)
* Find the handler for the prefix and dispatch its get() operation.
*/
ssize_t
generic_getxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
void
*
buffer
,
size_t
size
)
generic_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inode
,
const
char
*
name
,
void
*
buffer
,
size_t
size
)
{
const
struct
xattr_handler
*
handler
;
handler
=
xattr_resolve_name
(
dentry
->
d_sb
->
s_xattr
,
&
name
);
if
(
IS_ERR
(
handler
))
return
PTR_ERR
(
handler
);
return
handler
->
get
(
handler
,
dentry
,
d_inode
(
dentry
)
,
return
handler
->
get
(
handler
,
dentry
,
inode
,
name
,
buffer
,
size
);
}
...
...
include/linux/fs.h
View file @
ce23e640
...
...
@@ -1702,7 +1702,8 @@ struct inode_operations {
int
(
*
setattr
)
(
struct
dentry
*
,
struct
iattr
*
);
int
(
*
getattr
)
(
struct
vfsmount
*
mnt
,
struct
dentry
*
,
struct
kstat
*
);
int
(
*
setxattr
)
(
struct
dentry
*
,
const
char
*
,
const
void
*
,
size_t
,
int
);
ssize_t
(
*
getxattr
)
(
struct
dentry
*
,
const
char
*
,
void
*
,
size_t
);
ssize_t
(
*
getxattr
)
(
struct
dentry
*
,
struct
inode
*
,
const
char
*
,
void
*
,
size_t
);
ssize_t
(
*
listxattr
)
(
struct
dentry
*
,
char
*
,
size_t
);
int
(
*
removexattr
)
(
struct
dentry
*
,
const
char
*
);
int
(
*
fiemap
)(
struct
inode
*
,
struct
fiemap_extent_info
*
,
u64
start
,
...
...
include/linux/xattr.h
View file @
ce23e640
...
...
@@ -52,7 +52,7 @@ int __vfs_setxattr_noperm(struct dentry *, const char *, const void *, size_t, i
int
vfs_setxattr
(
struct
dentry
*
,
const
char
*
,
const
void
*
,
size_t
,
int
);
int
vfs_removexattr
(
struct
dentry
*
,
const
char
*
);
ssize_t
generic_getxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
void
*
buffer
,
size_t
size
);
ssize_t
generic_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inode
,
const
char
*
name
,
void
*
buffer
,
size_t
size
);
ssize_t
generic_listxattr
(
struct
dentry
*
dentry
,
char
*
buffer
,
size_t
buffer_size
);
int
generic_setxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
const
void
*
value
,
size_t
size
,
int
flags
);
int
generic_removexattr
(
struct
dentry
*
dentry
,
const
char
*
name
);
...
...
net/socket.c
View file @
ce23e640
...
...
@@ -466,7 +466,7 @@ static struct socket *sockfd_lookup_light(int fd, int *err, int *fput_needed)
#define XATTR_SOCKPROTONAME_SUFFIX "sockprotoname"
#define XATTR_NAME_SOCKPROTONAME (XATTR_SYSTEM_PREFIX XATTR_SOCKPROTONAME_SUFFIX)
#define XATTR_NAME_SOCKPROTONAME_LEN (sizeof(XATTR_NAME_SOCKPROTONAME)-1)
static
ssize_t
sockfs_getxattr
(
struct
dentry
*
dentry
,
static
ssize_t
sockfs_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inode
,
const
char
*
name
,
void
*
value
,
size_t
size
)
{
const
char
*
proto_name
;
...
...
security/commoncap.c
View file @
ce23e640
...
...
@@ -313,7 +313,7 @@ int cap_inode_need_killpriv(struct dentry *dentry)
if
(
!
inode
->
i_op
->
getxattr
)
return
0
;
error
=
inode
->
i_op
->
getxattr
(
dentry
,
XATTR_NAME_CAPS
,
NULL
,
0
);
error
=
inode
->
i_op
->
getxattr
(
dentry
,
inode
,
XATTR_NAME_CAPS
,
NULL
,
0
);
if
(
error
<=
0
)
return
0
;
return
1
;
...
...
@@ -397,8 +397,8 @@ int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data
if
(
!
inode
||
!
inode
->
i_op
->
getxattr
)
return
-
ENODATA
;
size
=
inode
->
i_op
->
getxattr
((
struct
dentry
*
)
dentry
,
XATTR_NAME_CAPS
,
&
caps
,
XATTR_CAPS_SZ
);
size
=
inode
->
i_op
->
getxattr
((
struct
dentry
*
)
dentry
,
inode
,
XATTR_NAME_CAPS
,
&
caps
,
XATTR_CAPS_SZ
);
if
(
size
==
-
ENODATA
||
size
==
-
EOPNOTSUPP
)
/* no data, that's ok */
return
-
ENODATA
;
...
...
security/integrity/evm/evm_main.c
View file @
ce23e640
...
...
@@ -82,7 +82,7 @@ static int evm_find_protected_xattrs(struct dentry *dentry)
return
-
EOPNOTSUPP
;
for
(
xattr
=
evm_config_xattrnames
;
*
xattr
!=
NULL
;
xattr
++
)
{
error
=
inode
->
i_op
->
getxattr
(
dentry
,
*
xattr
,
NULL
,
0
);
error
=
inode
->
i_op
->
getxattr
(
dentry
,
inode
,
*
xattr
,
NULL
,
0
);
if
(
error
<
0
)
{
if
(
error
==
-
ENODATA
)
continue
;
...
...
security/selinux/hooks.c
View file @
ce23e640
...
...
@@ -506,7 +506,8 @@ static int sb_finish_set_opts(struct super_block *sb)
rc
=
-
EOPNOTSUPP
;
goto
out
;
}
rc
=
root_inode
->
i_op
->
getxattr
(
root
,
XATTR_NAME_SELINUX
,
NULL
,
0
);
rc
=
root_inode
->
i_op
->
getxattr
(
root
,
root_inode
,
XATTR_NAME_SELINUX
,
NULL
,
0
);
if
(
rc
<
0
&&
rc
!=
-
ENODATA
)
{
if
(
rc
==
-
EOPNOTSUPP
)
printk
(
KERN_WARNING
"SELinux: (dev %s, type "
...
...
@@ -1412,13 +1413,13 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
goto
out_unlock
;
}
context
[
len
]
=
'\0'
;
rc
=
inode
->
i_op
->
getxattr
(
dentry
,
XATTR_NAME_SELINUX
,
rc
=
inode
->
i_op
->
getxattr
(
dentry
,
inode
,
XATTR_NAME_SELINUX
,
context
,
len
);
if
(
rc
==
-
ERANGE
)
{
kfree
(
context
);
/* Need a larger buffer. Query for the right size. */
rc
=
inode
->
i_op
->
getxattr
(
dentry
,
XATTR_NAME_SELINUX
,
rc
=
inode
->
i_op
->
getxattr
(
dentry
,
inode
,
XATTR_NAME_SELINUX
,
NULL
,
0
);
if
(
rc
<
0
)
{
dput
(
dentry
);
...
...
@@ -1432,7 +1433,7 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
goto
out_unlock
;
}
context
[
len
]
=
'\0'
;
rc
=
inode
->
i_op
->
getxattr
(
dentry
,
rc
=
inode
->
i_op
->
getxattr
(
dentry
,
inode
,
XATTR_NAME_SELINUX
,
context
,
len
);
}
...
...
security/smack/smack_lsm.c
View file @
ce23e640
...
...
@@ -272,7 +272,7 @@ static struct smack_known *smk_fetch(const char *name, struct inode *ip,
if
(
buffer
==
NULL
)
return
ERR_PTR
(
-
ENOMEM
);
rc
=
ip
->
i_op
->
getxattr
(
dp
,
name
,
buffer
,
SMK_LONGLABEL
);
rc
=
ip
->
i_op
->
getxattr
(
dp
,
ip
,
name
,
buffer
,
SMK_LONGLABEL
);
if
(
rc
<
0
)
skp
=
ERR_PTR
(
rc
);
else
if
(
rc
==
0
)
...
...
@@ -3519,7 +3519,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode)
TRANS_TRUE
,
TRANS_TRUE_SIZE
,
0
);
}
else
{
rc
=
inode
->
i_op
->
getxattr
(
dp
,
rc
=
inode
->
i_op
->
getxattr
(
dp
,
inode
,
XATTR_NAME_SMACKTRANSMUTE
,
trattr
,
TRANS_TRUE_SIZE
);
if
(
rc
>=
0
&&
strncmp
(
trattr
,
TRANS_TRUE
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment