SUNRPC: fix copying of multiple pages in gss_read_proxy_verf()
authorMartijn de Gouw <martijn.de.gouw@prodrive-technologies.com>
Mon, 19 Oct 2020 11:42:27 +0000 (13:42 +0200)
committerJ. Bruce Fields <bfields@redhat.com>
Tue, 20 Oct 2020 17:21:30 +0000 (13:21 -0400)
commitd48c8124749c9a5081fe68680f83605e272c984b
treec5a094ec951b61a0613c7c5430e119b92882ae79
parent27a1e8a0f79e643d4dedb46f71e76bdee3801877
SUNRPC: fix copying of multiple pages in gss_read_proxy_verf()

When the passed token is longer than 4032 bytes, the remaining part
of the token must be copied from the rqstp->rq_arg.pages. But the
copy must make sure it happens in a consecutive way.

With the existing code, the first memcpy copies 'length' bytes from
argv->iobase, but since the header is in front, this never fills the
whole first page of in_token->pages.

The mecpy in the loop copies the following bytes, but starts writing at
the next page of in_token->pages.  This leaves the last bytes of page 0
unwritten.

Symptoms were that users with many groups were not able to access NFS
exports, when using Active Directory as the KDC.

Signed-off-by: Martijn de Gouw <martijn.de.gouw@prodrive-technologies.com>
Fixes: 5866efa8cbfb "SUNRPC: Fix svcauth_gss_proxy_init()"
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
net/sunrpc/auth_gss/svcauth_gss.c