proc: do not access cmdline nor environ from file-backed areas
authorWilly Tarreau <w@1wt.eu>
Fri, 11 May 2018 06:11:44 +0000 (08:11 +0200)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 17 May 2018 16:27:47 +0000 (09:27 -0700)
commit7f7ccc2ccc2e70c6054685f5e3522efa81556830
tree7309cb80e03910053c21d5b003ed1d6b2dcacc16
parente6506eb241871d68647c53cb6d0a16299550ae97
proc: do not access cmdline nor environ from file-backed areas

proc_pid_cmdline_read() and environ_read() directly access the target
process' VM to retrieve the command line and environment. If this
process remaps these areas onto a file via mmap(), the requesting
process may experience various issues such as extra delays if the
underlying device is slow to respond.

Let's simply refuse to access file-backed areas in these functions.
For this we add a new FOLL_ANON gup flag that is passed to all calls
to access_remote_vm(). The code already takes care of such failures
(including unmapped areas). Accesses via /proc/pid/mem were not
changed though.

This was assigned CVE-2018-1120.

Note for stable backports: the patch may apply to kernels prior to 4.11
but silently miss one location; it must be checked that no call to
access_remote_vm() keeps zero as the last argument.

Reported-by: Qualys Security Advisory <qsa@qualys.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/proc/base.c
include/linux/mm.h
mm/gup.c