diff options
author | Dave Hansen <haveblue@us.ibm.com> | 2008-02-15 17:37:38 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2008-04-19 00:29:15 -0400 |
commit | 18f335aff86913de3c76f88d32c8135c1da62ce6 (patch) | |
tree | bf541547b9774137a161d200bace04ad152e80e3 /fs/nfsd/vfs.c | |
parent | 9079b1eb1753f217c3de9f1b7dd7fd549cc3f0cf (diff) |
[PATCH] r/o bind mounts: elevate write count for xattr_permission() callers
This basically audits the callers of xattr_permission(), which calls
permission() and can perform writes to the filesystem.
[AV: add missing parts - removexattr() and nfsd posix acls, plug for a leak
spotted by Miklos]
Acked-by: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/nfsd/vfs.c')
-rw-r--r-- | fs/nfsd/vfs.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 18a4cc9feeb3..626dfd38528f 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c | |||
@@ -2086,6 +2086,9 @@ nfsd_set_posix_acl(struct svc_fh *fhp, int type, struct posix_acl *acl) | |||
2086 | } else | 2086 | } else |
2087 | size = 0; | 2087 | size = 0; |
2088 | 2088 | ||
2089 | error = mnt_want_write(fhp->fh_export->ex_path.mnt); | ||
2090 | if (error) | ||
2091 | goto getout; | ||
2089 | if (size) | 2092 | if (size) |
2090 | error = vfs_setxattr(fhp->fh_dentry, name, value, size, 0); | 2093 | error = vfs_setxattr(fhp->fh_dentry, name, value, size, 0); |
2091 | else { | 2094 | else { |
@@ -2097,6 +2100,7 @@ nfsd_set_posix_acl(struct svc_fh *fhp, int type, struct posix_acl *acl) | |||
2097 | error = 0; | 2100 | error = 0; |
2098 | } | 2101 | } |
2099 | } | 2102 | } |
2103 | mnt_drop_write(fhp->fh_export->ex_path.mnt); | ||
2100 | 2104 | ||
2101 | getout: | 2105 | getout: |
2102 | kfree(value); | 2106 | kfree(value); |