lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue,  3 Mar 2020 18:43:56 +0100
From:   Greg Kroah-Hartman <gregkh@...uxfoundation.org>
To:     linux-kernel@...r.kernel.org
Cc:     Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        stable@...r.kernel.org, John Hubbard <jhubbard@...dia.com>,
        Leon Romanovsky <leonro@...lanox.com>, Jan Kara <jack@...e.cz>,
        Christoph Hellwig <hch@....de>,
        Alex Williamson <alex.williamson@...hat.com>,
        "Aneesh Kumar K.V" <aneesh.kumar@...ux.ibm.com>,
        Björn Töpel <bjorn.topel@...el.com>,
        Daniel Vetter <daniel.vetter@...ll.ch>,
        Dan Williams <dan.j.williams@...el.com>,
        Hans Verkuil <hverkuil-cisco@...all.nl>,
        Ira Weiny <ira.weiny@...el.com>,
        Jason Gunthorpe <jgg@...lanox.com>,
        Jason Gunthorpe <jgg@...pe.ca>, Jens Axboe <axboe@...nel.dk>,
        Jerome Glisse <jglisse@...hat.com>,
        Jonathan Corbet <corbet@....net>,
        "Kirill A. Shutemov" <kirill@...temov.name>,
        Mauro Carvalho Chehab <mchehab@...nel.org>,
        Mike Rapoport <rppt@...ux.ibm.com>,
        Andrew Morton <akpm@...ux-foundation.org>,
        Linus Torvalds <torvalds@...ux-foundation.org>
Subject: [PATCH 5.5 172/176] mm/gup: allow FOLL_FORCE for get_user_pages_fast()

From: John Hubbard <jhubbard@...dia.com>

commit f4000fdf435b8301a11cf85237c561047f8c4c72 upstream.

Commit 817be129e6f2 ("mm: validate get_user_pages_fast flags") allowed
only FOLL_WRITE and FOLL_LONGTERM to be passed to get_user_pages_fast().
This, combined with the fact that get_user_pages_fast() falls back to
"slow gup", which *does* accept FOLL_FORCE, leads to an odd situation:
if you need FOLL_FORCE, you cannot call get_user_pages_fast().

There does not appear to be any reason for filtering out FOLL_FORCE.
There is nothing in the _fast() implementation that requires that we
avoid writing to the pages.  So it appears to have been an oversight.

Fix by allowing FOLL_FORCE to be set for get_user_pages_fast().

Link: http://lkml.kernel.org/r/20200107224558.2362728-9-jhubbard@nvidia.com
Fixes: 817be129e6f2 ("mm: validate get_user_pages_fast flags")
Signed-off-by: John Hubbard <jhubbard@...dia.com>
Reviewed-by: Leon Romanovsky <leonro@...lanox.com>
Reviewed-by: Jan Kara <jack@...e.cz>
Cc: Christoph Hellwig <hch@....de>
Cc: Alex Williamson <alex.williamson@...hat.com>
Cc: Aneesh Kumar K.V <aneesh.kumar@...ux.ibm.com>
Cc: Björn Töpel <bjorn.topel@...el.com>
Cc: Daniel Vetter <daniel.vetter@...ll.ch>
Cc: Dan Williams <dan.j.williams@...el.com>
Cc: Hans Verkuil <hverkuil-cisco@...all.nl>
Cc: Ira Weiny <ira.weiny@...el.com>
Cc: Jason Gunthorpe <jgg@...lanox.com>
Cc: Jason Gunthorpe <jgg@...pe.ca>
Cc: Jens Axboe <axboe@...nel.dk>
Cc: Jerome Glisse <jglisse@...hat.com>
Cc: Jonathan Corbet <corbet@....net>
Cc: Kirill A. Shutemov <kirill@...temov.name>
Cc: Mauro Carvalho Chehab <mchehab@...nel.org>
Cc: Mike Rapoport <rppt@...ux.ibm.com>
Signed-off-by: Andrew Morton <akpm@...ux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@...ux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@...uxfoundation.org>

---
 mm/gup.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/mm/gup.c
+++ b/mm/gup.c
@@ -2415,7 +2415,8 @@ int get_user_pages_fast(unsigned long st
 	unsigned long addr, len, end;
 	int nr = 0, ret = 0;
 
-	if (WARN_ON_ONCE(gup_flags & ~(FOLL_WRITE | FOLL_LONGTERM)))
+	if (WARN_ON_ONCE(gup_flags & ~(FOLL_WRITE | FOLL_LONGTERM |
+				       FOLL_FORCE)))
 		return -EINVAL;
 
 	start = untagged_addr(start) & PAGE_MASK;


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ