mm: fix __gup_device_huge vs unmap
authorDan Williams <dan.j.williams@intel.com>
Fri, 20 Apr 2018 04:32:19 +0000 (21:32 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 3 Jul 2018 09:24:57 +0000 (11:24 +0200)
commit2d329968a883f4b64758df6a6c972a02392b3a24
tree283810e9f311754df48f191554ada8c2a1579af8
parent5d6ad5a030675c6527956cf8737657b6be81b41b
mm: fix __gup_device_huge vs unmap

commit a9b6de77b1a3ff729f7bfc54b2e17711776a416c upstream.

get_user_pages_fast() for device pages is missing the typical validation
that all page references have been taken while the mapping was valid.
Without this validation truncate operations can not reliably coordinate
against new page reference events like O_DIRECT.

Cc: <stable@vger.kernel.org>
Fixes: 3565fce3a659 ("mm, x86: get_user_pages() for dax mappings")
Reported-by: Jan Kara <jack@suse.cz>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
mm/gup.c