• David Hildenbrand's avatar
    selftests/vm: anon_cow: prepare for non-anonymous COW tests · 7aca5ca1
    David Hildenbrand authored
    Patch series "mm/gup: remove FOLL_FORCE usage from drivers (reliable R/O
    long-term pinning)".
    
    For now, we did not support reliable R/O long-term pinning in COW
    mappings.  That means, if we would trigger R/O long-term pinning in
    MAP_PRIVATE mapping, we could end up pinning the (R/O-mapped) shared
    zeropage or a pagecache page.
    
    The next write access would trigger a write fault and replace the pinned
    page by an exclusive anonymous page in the process page table; whatever
    the process would write to that private page copy would not be visible by
    the owner of the previous page pin: for example, RDMA could read stale
    data.  The end result is essentially an unexpected and hard-to-debug
    memory corruption.
    
    Some drivers tried working around that limitation by using
    "FOLL_FORCE|FOLL_WRITE|FOLL_LONGTERM" for R/O long-term pinning for now. 
    FOLL_WRITE would trigger a write fault, if required, and break COW before
    pinning the page.  FOLL_FORCE is required because the VMA might lack write
    permissions, and drivers wanted to make that working as well, just like
    one would expect (no write access, but still triggering a write access to
    break COW).
    
    However, that is not a practical solution, because
    (1) Drivers that don't stick to that undocumented and debatable pattern
        would still run into that issue. For example, VFIO only uses
        FOLL_LONGTERM for R/O long-term pinning.
    (2) Using FOLL_WRITE just to work around a COW mapping + page pinning
        limitation is unintuitive. FOLL_WRITE would, for example, mark the
        page softdirty or trigger uffd-wp, even though, there actually isn't
        going to be any write access.
    (3) The purpose of FOLL_FORCE is debug access, not access without lack of
        VMA permissions by arbitrarty drivers.
    
    So instead, make R/O long-term pinning work as expected, by breaking COW
    in a COW mapping early, such that we can remove any FOLL_FORCE usage from
    drivers and make FOLL_FORCE ptrace-specific (renaming it to FOLL_PTRACE).
    More details in patch #8.
    
    
    This patch (of 19):
    
    Originally, the plan was to have a separate tests for testing COW of
    non-anonymous (e.g., shared zeropage) pages.
    
    Turns out, that we'd need a lot of similar functionality and that there
    isn't a really good reason to separate it. So let's prepare for non-anon
    tests by renaming to "cow".
    
    Link: https://lkml.kernel.org/r/20221116102659.70287-1-david@redhat.com
    Link: https://lkml.kernel.org/r/20221116102659.70287-2-david@redhat.comSigned-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: Alex Williamson <alex.williamson@redhat.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Andy Walls <awalls@md.metrocast.net>
    Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com>
    Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Bernard Metzler <bmt@zurich.ibm.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Christian Benvenuti <benve@cisco.com>
    Cc: Christian Gmeiner <christian.gmeiner@gmail.com>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Christoph Hellwig <hch@infradead.org>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: David Airlie <airlied@gmail.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>
    Cc: "Eric W . Biederman" <ebiederm@xmission.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Hans Verkuil <hverkuil@xs4all.nl>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Inki Dae <inki.dae@samsung.com>
    Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
    Cc: James Morris <jmorris@namei.org>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Johannes Berg <johannes@sipsolutions.net>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Kentaro Takeda <takedakn@nttdata.co.jp>
    Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Cc: Kyungmin Park <kyungmin.park@samsung.com>
    Cc: Leon Romanovsky <leon@kernel.org>
    Cc: Leon Romanovsky <leonro@nvidia.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Lucas Stach <l.stach@pengutronix.de>
    Cc: Marek Szyprowski <m.szyprowski@samsung.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Matt Turner <mattst88@gmail.com>
    Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: Nadav Amit <namit@vmware.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Nelson Escobar <neescoba@cisco.com>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Oded Gabbay <ogabbay@kernel.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Paul Moore <paul@paul-moore.com>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Richard Henderson <richard.henderson@linaro.org>
    Cc: Richard Weinberger <richard@nod.at>
    Cc: Russell King <linux+etnaviv@armlinux.org.uk>
    Cc: Serge Hallyn <serge@hallyn.com>
    Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tomasz Figa <tfiga@chromium.org>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    7aca5ca1
cow.c 28 KB