summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorSven Wegener <sven.wegener@stealer.net>2012-12-08 15:30:18 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-01-11 09:18:36 -0800
commit43d1640924a2bd61e5f8ad156930353bd410e36d (patch)
tree68d5de18d373d6bb00e89b1719b1950f3ecd85f3 /fs
parent62ec24f42255d4c140a77f206068b76262c01c53 (diff)
downloadlwn-43d1640924a2bd61e5f8ad156930353bd410e36d.tar.gz
lwn-43d1640924a2bd61e5f8ad156930353bd410e36d.zip
NFSv4: Check for buffer length in __nfs4_get_acl_uncached
commit 7d3e91a89b7adbc2831334def9e494dd9892f9af upstream. Commit 1f1ea6c "NFSv4: Fix buffer overflow checking in __nfs4_get_acl_uncached" accidently dropped the checking for too small result buffer length. If someone uses getxattr on "system.nfs4_acl" on an NFSv4 mount supporting ACLs, the ACL has not been cached and the buffer suplied is too short, we still copy the complete ACL, resulting in kernel and user space memory corruption. Signed-off-by: Sven Wegener <sven.wegener@stealer.net> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/nfs/nfs4proc.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 537181ca8fa9..ee21395f579c 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -3937,8 +3937,13 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
goto out_free;
}
nfs4_write_cached_acl(inode, pages, res.acl_data_offset, res.acl_len);
- if (buf)
+ if (buf) {
+ if (res.acl_len > buflen) {
+ ret = -ERANGE;
+ goto out_free;
+ }
_copy_from_pages(buf, pages, res.acl_data_offset, res.acl_len);
+ }
out_ok:
ret = res.acl_len;
out_free: