fix a fencepost error in pipe_advance()
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 15 Jan 2017 00:33:08 +0000 (19:33 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 19 Jan 2017 19:18:02 +0000 (20:18 +0100)
commitd06367ac1730ded79aa78307126236bf83af95a3
tree451e2129d59ba675d7ef07ac628e38923d4f98b0
parentab8957396a692d46a357aec8ff57abc9bd5a878a
fix a fencepost error in pipe_advance()

commit b9dc6f65bc5e232d1c05fe34b5daadc7e8bbf1fb upstream.

The logics in pipe_advance() used to release all buffers past the new
position failed in cases when the number of buffers to release was equal
to pipe->buffers.  If that happened, none of them had been released,
leaving pipe full.  Worse, it was trivial to trigger and we end up with
pipe full of uninitialized pages.  IOW, it's an infoleak.

Reported-by: "Alan J. Wylie" <alan@wylie.me.uk>
Tested-by: "Alan J. Wylie" <alan@wylie.me.uk>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
lib/iov_iter.c