NFS: Prevent memory allocation failure in nfsacl_encode()
nfsacl_encode() allocates memory in certain cases. This of course
is not guaranteed to work.
Since commit 9f06c719
"SUNRPC: New xdr_streams XDR encoder API", the
kernel's XDR encoders can't return a result indicating possibly a
failure, so a memory allocation failure in nfsacl_encode() has become
fatal (ie, the XDR code Oopses) in some cases.
However, the allocated memory is a tiny fixed amount, on the order
of 40-50 bytes. We can easily use a stack-allocated buffer for
this, with only a wee bit of nose-holding.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
committed by
Trond Myklebust
parent
731f3f482a
commit
f61f6da0d5
@ -311,8 +311,8 @@ static int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl,
|
||||
if (!nfs_server_capable(inode, NFS_CAP_ACLS))
|
||||
goto out;
|
||||
|
||||
/* We are doing this here, because XDR marshalling can only
|
||||
return -ENOMEM. */
|
||||
/* We are doing this here because XDR marshalling does not
|
||||
* return any results, it BUGs. */
|
||||
status = -ENOSPC;
|
||||
if (acl != NULL && acl->a_count > NFS_ACL_MAX_ENTRIES)
|
||||
goto out;
|
||||
|
Reference in New Issue
Block a user