rpc: fix xdr_truncate_encode to handle buffer ending on page boundary
authorJ. Bruce Fields <bfields@redhat.com>
Mon, 22 Dec 2014 21:14:51 +0000 (16:14 -0500)
committerJ. Bruce Fields <bfields@redhat.com>
Wed, 7 Jan 2015 19:03:58 +0000 (14:03 -0500)
commit49a068f82a1d30eb585d7804b05948376be6cf9a
tree670d3bc2de3e9faec18f6fbc36f0a997f99a0992
parent94ae1db226a5bcbb48372d81161f084c9e283fd8
rpc: fix xdr_truncate_encode to handle buffer ending on page boundary

A struct xdr_stream at a page boundary might point to the end of one
page or the beginning of the next, but xdr_truncate_encode isn't
prepared to handle the former.

This can cause corruption of NFSv4 READDIR replies in the case that a
readdir entry that would have exceeded the client's dircount/maxcount
limit would have ended exactly on a 4k page boundary.  You're more
likely to hit this case on large directories.

Other xdr_truncate_encode callers are probably also affected.

Reported-by: Holger Hoffstätte <holger.hoffstaette@googlemail.com>
Tested-by: Holger Hoffstätte <holger.hoffstaette@googlemail.com>
Fixes: 3e19ce762b53 "rpc: xdr_truncate_encode"
Cc: stable@vger.kernel.org
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
net/sunrpc/xdr.c