|
@@ -326,18 +326,19 @@ nolsm:
|
|
|
EXPORT_SYMBOL_GPL(vfs_getxattr);
|
|
|
|
|
|
ssize_t
|
|
|
-vfs_listxattr(struct dentry *d, char *list, size_t size)
|
|
|
+vfs_listxattr(struct dentry *dentry, char *list, size_t size)
|
|
|
{
|
|
|
+ struct inode *inode = d_inode(dentry);
|
|
|
ssize_t error;
|
|
|
|
|
|
- error = security_inode_listxattr(d);
|
|
|
+ error = security_inode_listxattr(dentry);
|
|
|
if (error)
|
|
|
return error;
|
|
|
- error = -EOPNOTSUPP;
|
|
|
- if (d->d_inode->i_op->listxattr) {
|
|
|
- error = d->d_inode->i_op->listxattr(d, list, size);
|
|
|
+ if (inode->i_op->listxattr && (inode->i_opflags & IOP_XATTR)) {
|
|
|
+ error = -EOPNOTSUPP;
|
|
|
+ error = inode->i_op->listxattr(dentry, list, size);
|
|
|
} else {
|
|
|
- error = security_inode_listsecurity(d->d_inode, list, size);
|
|
|
+ error = security_inode_listsecurity(inode, list, size);
|
|
|
if (size && error > size)
|
|
|
error = -ERANGE;
|
|
|
}
|