nfsd4: reserve head space for krb5 integ/priv info
authorJ. Bruce Fields <bfields@redhat.com>
Tue, 21 Jan 2014 16:06:52 +0000 (11:06 -0500)
committerJ. Bruce Fields <bfields@redhat.com>
Fri, 23 May 2014 13:03:47 +0000 (09:03 -0400)
Currently if the nfs-level part of a reply would be too large, we'll
return an error to the client.  But if the nfs-level part fits and
leaves no room for krb5p or krb5i stuff, then we just drop the request
entirely.

That's no good.  Instead, reserve some slack space at the end of the
buffer and make sure we fail outright if we'd come close.

The slack space here is a massive overstimate of what's required, we
should probably try for a tighter limit at some point.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4proc.c

index f809aa8d9213a8c98de5a51d9f63dd4d9a9d000d..747d6a87a47dbfdbd1d280fdcc5f9f8fe9f41983 100644 (file)
@@ -1262,7 +1262,7 @@ static void svcxdr_init_encode(struct svc_rqst *rqstp,
 
        xdr->buf = buf;
        xdr->p   = head->iov_base + head->iov_len;
-       xdr->end = head->iov_base + PAGE_SIZE;
+       xdr->end = head->iov_base + PAGE_SIZE - 2 * RPC_MAX_AUTH_SIZE;
 }
 
 /*