Regression: mmap rejects shared, read-only mappings of write-sealed memfds
From: Julian Orth
Date: Wed Nov 27 2024 - 15:49:49 EST
Since around
5de19506 mm: resolve faulty mmap_region() error path behaviour
mmap rejects shared, read-only mapping of memfds that have a write-seal applied.
Before the commit, the code in mmap_region was
if (file) {
vma->vm_file = get_file(file);
error = mmap_file(file, vma);
if (error)
goto unmap_and_free_vma;
if (vma_is_shared_maywrite(vma)) {
error = mapping_map_writable(file->f_mapping);
where mmap_file would clear the VM_MAYWRITE flag for write-sealed memfds.
After the commit, the code in mmap_region is simply
if (file && is_shared_maywrite(vm_flags)) {
int error = mapping_map_writable(file->f_mapping);
with mmap_file not being called until much later.
This regression seems to have been first released in 6.12 and is still
present on master.