When populating a VMA range via the aptly named populate_vma_page_range()
an unreadable VMA will always eventually fail with -EFAULT.
That a VMA is accessible is always checked, however VMA_MAYREAD_BIT is not.
All user mappings always have VMA_MAYREAD_BIT set, so this check only
impacts kernel mappings.
It is implemented specifically to disallow population of uprobes XOL
mappings which are exec-only.
A nasty interaction with these mappings may occur if they are mlocked, so
actively disallow this early.
This allows a subsequent commit to remove the VM_IO check in
__mm_populate() which otherwise requires non-MMIO mappings to be wrongly
flagged simply as a workaround.
Signed-off-by: Lorenzo Stoakes (ARM) <ljs@kernel.org>
Sashiko has reviewed this patch and found no issues. It looks great!
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260914-b4-mmap-prepare-vma-flag-sanify-v2-0-7d9781ed5361@kernel.org?part=21