NFSv4: include bitmap in nfsv4 get acl data
The NFSv4 bitmap size is unbounded: a server can return an arbitrary
sized bitmap in an FATTR4_WORD0_ACL request. Replace using the
nfs4_fattr_bitmap_maxsz as a guess to the maximum bitmask returned by a server
with the inclusion of the bitmap (xdr length plus bitmasks) and the acl data
xdr length to the (cached) acl page data.
This is a general solution to commit e5012d1f
"NFSv4.1: update
nfs4_fattr_bitmap_maxsz" and fixes hitting a BUG_ON in xdr_shrink_bufhead
when getting ACLs.
Fix a bug in decode_getacl that returned -EINVAL on ACLs > page when getxattr
was called with a NULL buffer, preventing ACL > PAGE_SIZE from being retrieved.
Cc: stable@kernel.org
Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:

committed by
Trond Myklebust

parent
3476f114ad
commit
bf118a342f
@@ -296,7 +296,7 @@ _copy_to_pages(struct page **pages, size_t pgbase, const char *p, size_t len)
|
||||
* Copies data into an arbitrary memory location from an array of pages
|
||||
* The copy is assumed to be non-overlapping.
|
||||
*/
|
||||
static void
|
||||
void
|
||||
_copy_from_pages(char *p, struct page **pages, size_t pgbase, size_t len)
|
||||
{
|
||||
struct page **pgfrom;
|
||||
@@ -324,6 +324,7 @@ _copy_from_pages(char *p, struct page **pages, size_t pgbase, size_t len)
|
||||
|
||||
} while ((len -= copy) != 0);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(_copy_from_pages);
|
||||
|
||||
/*
|
||||
* xdr_shrink_bufhead
|
||||
|
Reference in New Issue
Block a user