On Sun, Apr 23, 2023 at 08:40:53PM +0100, Lorenzo Stoakes wrote: > On Sun, Apr 23, 2023 at 09:32:01PM +0200, Simon Horman wrote: > > On Sat, Apr 22, 2023 at 02:37:05PM +0100, Lorenzo Stoakes wrote: > > > It isn't safe to write to file-backed mappings as GUP does not ensure that > > > the semantics associated with such a write are performed correctly, for > > > instance filesystems which rely upon write-notify will not be correctly > > > notified. > > > > > > There are exceptions to this - shmem and hugetlb mappings are (in effect) > > > anonymous mappings by other names so we do permit this operation in these > > > cases. > > > > > > In addition, if no pinning takes place (neither FOLL_GET nor FOLL_PIN is > > > specified and neither flags gets implicitly set) then no writing can occur > > > so we do not perform the check in this instance. > > > > > > This is an important exception, as populate_vma_page_range() invokes > > > __get_user_pages() in this way (and thus so does __mm_populate(), used by > > > MAP_POPULATE mmap() and mlock() invocations). > > > > > > There are GUP users within the kernel that do nevertheless rely upon this > > > behaviour, so we introduce the FOLL_ALLOW_BROKEN_FILE_MAPPING flag to > > > explicitly permit this kind of GUP access. > > > > > > This is required in order to not break userspace in instances where the > > > uAPI might permit file-mapped addresses - a number of RDMA users require > > > this for instance, as do the process_vm_[read/write]v() system calls, > > > /proc/$pid/mem, ptrace and SDT uprobes. Each of these callers have been > > > updated to use this flag. > > > > > > Making this change is an important step towards a more reliable GUP, and > > > explicitly indicates which callers might encouter issues moving forward. > > > > nit: s/encouter/encounter/ > > > > Ack, I always seem to leave at least one or two easter egg spelling > mistakes in :) :) > Will fix up on next respin (in unlikely event of no further review, > hopefully Andrew would pick up!) >