The vfsmount will be passed down to the LSM hook so that LSMs can compute pathnames. Signed-off-by: Tony Jones <tonyj@xxxxxxx> Signed-off-by: Andreas Gruenbacher <agruen@xxxxxxx> Signed-off-by: John Johansen <jjohansen@xxxxxxx> --- fs/nfsd/vfs.c | 7 ++++--- fs/xattr.c | 12 ++++++------ include/linux/xattr.h | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -1957,6 +1957,7 @@ nfsd_get_posix_acl(struct svc_fh *fhp, i int nfsd_set_posix_acl(struct svc_fh *fhp, int type, struct posix_acl *acl) { + struct vfsmount *mnt; struct inode *inode = fhp->fh_dentry->d_inode; char *name; void *value = NULL; @@ -1989,14 +1990,14 @@ nfsd_set_posix_acl(struct svc_fh *fhp, i } else size = 0; + mnt = fhp->fh_export->ex_mnt; if (size) - error = vfs_setxattr(fhp->fh_dentry, fhp->fh_export->ex_mnt, - name, value, size,0); + error = vfs_setxattr(fhp->fh_dentry, mnt, name, value, size,0); else { if (!S_ISDIR(inode->i_mode) && type == ACL_TYPE_DEFAULT) error = 0; else { - error = vfs_removexattr(fhp->fh_dentry, name); + error = vfs_removexattr(fhp->fh_dentry, mnt, name); if (error == -ENODATA) error = 0; } --- a/fs/xattr.c +++ b/fs/xattr.c @@ -165,7 +165,7 @@ vfs_listxattr(struct dentry *dentry, str EXPORT_SYMBOL_GPL(vfs_listxattr); int -vfs_removexattr(struct dentry *dentry, char *name) +vfs_removexattr(struct dentry *dentry, struct vfsmount *mnt, char *name) { struct inode *inode = dentry->d_inode; int error; @@ -438,7 +438,7 @@ sys_flistxattr(int fd, char __user *list * Extended attribute REMOVE operations */ static long -removexattr(struct dentry *d, char __user *name) +removexattr(struct dentry *dentry, struct vfsmount *mnt, char __user *name) { int error; char kname[XATTR_NAME_MAX + 1]; @@ -449,7 +449,7 @@ removexattr(struct dentry *d, char __use if (error < 0) return error; - return vfs_removexattr(d, kname); + return vfs_removexattr(dentry, mnt, kname); } asmlinkage long @@ -461,7 +461,7 @@ sys_removexattr(char __user *path, char error = user_path_walk(path, &nd); if (error) return error; - error = removexattr(nd.dentry, name); + error = removexattr(nd.dentry, nd.mnt, name); path_release(&nd); return error; } @@ -475,7 +475,7 @@ sys_lremovexattr(char __user *path, char error = user_path_walk_link(path, &nd); if (error) return error; - error = removexattr(nd.dentry, name); + error = removexattr(nd.dentry, nd.mnt, name); path_release(&nd); return error; } @@ -492,7 +492,7 @@ sys_fremovexattr(int fd, char __user *na return error; dentry = f->f_path.dentry; audit_inode(NULL, dentry->d_inode); - error = removexattr(dentry, name); + error = removexattr(dentry, f->f_path.mnt, name); fput(f); return error; } --- a/include/linux/xattr.h +++ b/include/linux/xattr.h @@ -52,7 +52,7 @@ ssize_t vfs_listxattr(struct dentry *d, size_t size); int vfs_setxattr(struct dentry *, struct vfsmount *, char *, void *, size_t, int); -int vfs_removexattr(struct dentry *, char *); +int vfs_removexattr(struct dentry *, struct vfsmount *, char *); ssize_t generic_getxattr(struct dentry *dentry, const char *name, void *buffer, size_t size); ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size); -- - To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html