On 2/8/24 01:26, Alexei Starovoitov wrote:
Also I believe I addressed all issues with missing mutex and wrap around, and pushed to: https://git.kernel.org/pub/scm/linux/kernel/git/ast/bpf.git/commit/?h=arena&id=e1cb522fee661e7346e8be567eade9cf607eaf11 Please take a look.
LGTM, thanks. minor things:
+static void arena_vm_close(struct vm_area_struct *vma) +{ + struct vma_list *vml; + + vml = vma->vm_private_data; + list_del(&vml->head); + vma->vm_private_data = NULL; + kfree(vml); +}
i think this also needs protected by the arena mutex. otherwise two VMAs that close at the same time can corrupt the arena vma_list. or a VMA that closes while you're zapping.
remember_vma() already has the mutex held, since it's called from mmap.
+static long arena_alloc_pages(struct bpf_arena *arena, long uaddr, long page_cnt, int node_id) +{ + long page_cnt_max = (arena->user_vm_end - arena->user_vm_start) >> PAGE_SHIFT;
this function and arena_free_pages() are both using user_vm_start/end before grabbing the mutex. so need to grab the mutex very early.
alternatively, you could make it so that the user must set the user_vm_start via map_extra, so you don't have to worry about these changing after the arena is created.
thanks, barret