On Fri, Apr 10, 2020 at 10:26 PM Andrii Nakryiko <andriin@xxxxxx> wrote: > VM_MAYWRITE flag during initial memory mapping determines if already mmap()'ed > pages can be later remapped as writable ones through mprotect() call. To > prevent user application to rewrite contents of memory-mapped as read-only and > subsequently frozen BPF map, remove VM_MAYWRITE flag completely on initially > read-only mapping. > > Alternatively, we could treat any memory-mapping on unfrozen map as writable > and bump writecnt instead. But there is little legitimate reason to map > BPF map as read-only and then re-mmap() it as writable through mprotect(), > instead of just mmap()'ing it as read/write from the very beginning. > > Also, at the suggestion of Jann Horn, drop unnecessary refcounting in mmap > operations. We can just rely on VMA holding reference to BPF map's file > properly. > > Fixes: fc9702273e2e ("bpf: Add mmap() support for BPF_MAP_TYPE_ARRAY") > Reported-by: Jann Horn <jannh@xxxxxxxxxx> > Signed-off-by: Andrii Nakryiko <andriin@xxxxxx> Reviewed-by: Jann Horn <jannh@xxxxxxxxxx> (in the sense that I think this patch is good and correct, but does not fix the entire problem in the bigger picture)