pipe: Fix buffer offset after partially failed read
authorBen Hutchings <ben@decadent.org.uk>
Sat, 13 Feb 2016 02:34:52 +0000 (02:34 +0000)
committermobile promotions <svcmobile_promotions@nvidia.com>
Tue, 26 Apr 2016 13:00:17 +0000 (06:00 -0700)
commit295779da8241ccaf8072ff665eddc065cbc52bb4
tree4d6af3f3d1cac7ba58f0e8af8298331fdb9c6da0
parent01098190950a40bbe24268ea1a43fac2a26e6ff8
pipe: Fix buffer offset after partially failed read

Quoting the RHEL advisory:

> It was found that the fix for CVE-2015-1805 incorrectly kept buffer
> offset and buffer length in sync on a failed atomic read, potentially
> resulting in a pipe buffer state corruption. A local, unprivileged user
> could use this flaw to crash the system or leak kernel memory to user
> space. (CVE-2016-0774, Moderate)

The same flawed fix was applied to stable branches from 2.6.32.y to
3.14.y inclusive, and I was able to reproduce the issue on 3.2.y.
We need to give pipe_iov_copy_to_user() a separate offset variable
and only update the buffer offset if it succeeds.

Bug 1744232
Bug 200188096

Change-Id: I988802f38acf40c7671fa0978880928b02d29b56
References: https://rhn.redhat.com/errata/RHSA-2016-0103.html
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
(cherry picked from commit feae3ca2e5e1a8f44aa6290255d3d9709985d0b2)
Reviewed-on: http://git-master/r/1127903
GVS: Gerrit_Virtual_Submit
Reviewed-by: David Dastous St Hilaire <ddastoussthi@nvidia.com>
Tested-by: David Dastous St Hilaire <ddastoussthi@nvidia.com>
Reviewed-by: Venkata Jagadish <vjagadish@nvidia.com>
Reviewed-by: Vinayak Pane <vpane@nvidia.com>
fs/pipe.c