1 // SPDX-License-Identifier: GPL-2.0-only 2 /* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */ 3 #include <linux/bpf.h> 4 #include <linux/btf.h> 5 #include <linux/cacheflush.h> 6 #include <linux/err.h> 7 #include <linux/irq_work.h> 8 #include "linux/filter.h" 9 #include <linux/llist.h> 10 #include <linux/mman.h> 11 #include <linux/btf_ids.h> 12 #include <linux/vmalloc.h> 13 #include <linux/pagemap.h> 14 #include <asm/tlbflush.h> 15 #include "range_tree.h" 16 17 /* 18 * bpf_arena is a sparsely populated shared memory region between bpf program and 19 * user space process. 20 * 21 * For example on x86-64 the values could be: 22 * user_vm_start 7f7d26200000 // picked by mmap() 23 * kern_vm_start ffffc90001e69000 // picked by get_vm_area() 24 * For user space all pointers within the arena are normal 8-byte addresses. 25 * In this example 7f7d26200000 is the address of the first page (pgoff=0). 26 * The bpf program will access it as: kern_vm_start + lower_32bit_of_user_ptr 27 * (u32)7f7d26200000 -> 26200000 28 * hence 29 * ffffc90001e69000 + 26200000 == ffffc90028069000 is "pgoff=0" within 4Gb 30 * kernel memory region. 31 * 32 * BPF JITs generate the following code to access arena: 33 * mov eax, eax // eax has lower 32-bit of user pointer 34 * mov word ptr [rax + r12 + off], bx 35 * where r12 == kern_vm_start and off is s16. 36 * Hence allocate 4Gb + GUARD_SZ/2 on each side. 37 * 38 * Initially kernel vm_area and user vma are not populated. 39 * User space can fault-in any address which will insert the page 40 * into kernel and user vma. 41 * bpf program can allocate a page via bpf_arena_alloc_pages() kfunc 42 * which will insert it into kernel vm_area. 43 * The later fault-in from user space will populate that page into user vma. 44 */ 45 46 /* number of bytes addressable by LDX/STX insn with 16-bit 'off' field */ 47 #define GUARD_SZ round_up(1ull << sizeof_field(struct bpf_insn, off) * 8, PAGE_SIZE << 1) 48 #define KERN_VM_SZ (SZ_4G + GUARD_SZ) 49 50 static void arena_free_pages(struct bpf_arena *arena, long uaddr, long page_cnt, bool sleepable); 51 52 struct bpf_arena { 53 struct bpf_map map; 54 u64 user_vm_start; 55 u64 user_vm_end; 56 struct vm_struct *kern_vm; 57 struct page *scratch_page; 58 struct range_tree rt; 59 /* protects rt and nr_pages */ 60 rqspinlock_t spinlock; 61 /* number of pages currently populated in the arena */ 62 u64 nr_pages; 63 struct list_head vma_list; 64 /* protects vma_list */ 65 struct mutex lock; 66 u64 zap_gen; 67 struct mutex zap_mutex; 68 struct irq_work free_irq; 69 struct work_struct free_work; 70 struct llist_head free_spans; 71 }; 72 73 static void arena_free_worker(struct work_struct *work); 74 static void arena_free_irq(struct irq_work *iw); 75 76 struct arena_free_span { 77 struct llist_node node; 78 unsigned long uaddr; 79 u32 page_cnt; 80 }; 81 82 u64 bpf_arena_get_kern_vm_start(struct bpf_arena *arena) 83 { 84 return arena ? (u64) (long) arena->kern_vm->addr + GUARD_SZ / 2 : 0; 85 } 86 87 u64 bpf_arena_get_user_vm_start(struct bpf_arena *arena) 88 { 89 return arena ? arena->user_vm_start : 0; 90 } 91 92 /** 93 * bpf_arena_map_kern_vm_start - kern_vm_start lookup by struct bpf_map * 94 * @map: a BPF_MAP_TYPE_ARENA map 95 * 96 * Return @map's kern_vm_start. 97 */ 98 u64 bpf_arena_map_kern_vm_start(struct bpf_map *map) 99 { 100 return bpf_arena_get_kern_vm_start(container_of(map, struct bpf_arena, map)); 101 } 102 103 /** 104 * bpf_prog_arena - return the bpf_map of the arena referenced by @prog 105 * @prog: a loaded BPF program 106 * 107 * The verifier enforces at most one arena per program and stores it in 108 * prog->aux->arena. Return that arena's underlying bpf_map, or NULL if 109 * @prog does not reference an arena. 110 */ 111 struct bpf_map *bpf_prog_arena(struct bpf_prog *prog) 112 { 113 struct bpf_arena *arena = prog->aux->arena; 114 115 return arena ? &arena->map : NULL; 116 } 117 118 static long arena_map_peek_elem(struct bpf_map *map, void *value) 119 { 120 return -EOPNOTSUPP; 121 } 122 123 static long arena_map_push_elem(struct bpf_map *map, void *value, u64 flags) 124 { 125 return -EOPNOTSUPP; 126 } 127 128 static long arena_map_pop_elem(struct bpf_map *map, void *value) 129 { 130 return -EOPNOTSUPP; 131 } 132 133 static long arena_map_delete_elem(struct bpf_map *map, void *value) 134 { 135 return -EOPNOTSUPP; 136 } 137 138 static int arena_map_get_next_key(struct bpf_map *map, void *key, void *next_key) 139 { 140 return -EOPNOTSUPP; 141 } 142 143 static long compute_pgoff(struct bpf_arena *arena, long uaddr) 144 { 145 return (u32)(uaddr - (u32)arena->user_vm_start) >> PAGE_SHIFT; 146 } 147 148 struct apply_range_data { 149 struct bpf_arena *arena; 150 struct llist_head *pages; 151 int i; 152 }; 153 154 struct clear_range_data { 155 struct bpf_arena *arena; 156 struct llist_head *free_pages; 157 }; 158 159 static int apply_range_set_cb(pte_t *pte, unsigned long addr, void *data) 160 { 161 struct apply_range_data *d = data; 162 struct llist_node *node; 163 struct page *page; 164 pte_t pteval; 165 166 if (!data) 167 return 0; 168 169 node = READ_ONCE(d->pages->first); 170 if (WARN_ON_ONCE(!node)) 171 return -EINVAL; 172 page = llist_entry(node, struct page, pcp_llist); 173 /* paranoia, similar to vmap_pages_pte_range() */ 174 if (WARN_ON_ONCE(!pfn_valid(page_to_pfn(page)))) 175 return -EINVAL; 176 177 pteval = mk_pte(page, PAGE_KERNEL); 178 #ifdef ptep_try_set 179 /* 180 * Kernel-fault recovery may have installed the scratch page here, and 181 * some architectures (arm64) prohibit valid->valid PTE transitions. 182 * Install atomically into a none slot. If scratch is present, clear it 183 * and flush_tlb_before_set() (break-before-make) before retrying. 184 */ 185 while (!ptep_try_set(pte, pteval)) { 186 pte_t old = ptep_get(pte); 187 188 if (pte_none(old)) 189 continue; 190 if (WARN_ON_ONCE(pte_page(old) != d->arena->scratch_page)) 191 return -EBUSY; 192 ptep_get_and_clear(&init_mm, addr, pte); 193 flush_tlb_before_set(addr); 194 } 195 #else 196 /* 197 * Without ptep_try_set() there is no atomic installer, but such arches 198 * also do not wire up bpf_arena_handle_page_fault(), so no scratch page 199 * is ever installed and the slot is always none here. 200 */ 201 if (unlikely(!pte_none(ptep_get(pte)))) 202 return -EBUSY; 203 set_pte_at(&init_mm, addr, pte, pteval); 204 #endif 205 WARN_ON_ONCE(llist_del_first(d->pages) != node); 206 d->i++; 207 WRITE_ONCE(d->arena->nr_pages, d->arena->nr_pages + 1); 208 return 0; 209 } 210 211 static void flush_vmap_cache(unsigned long start, unsigned long size) 212 { 213 flush_cache_vmap(start, start + size); 214 } 215 216 static int apply_range_clear_cb(pte_t *pte, unsigned long addr, void *data) 217 { 218 struct clear_range_data *d = data; 219 pte_t old_pte; 220 struct page *page; 221 222 /* 223 * Pairs with ptep_try_set() in the kernel-fault scratch installer. 224 * Both sides must be atomic. 225 */ 226 old_pte = ptep_get_and_clear(&init_mm, addr, pte); 227 if (pte_none(old_pte) || !pte_present(old_pte)) 228 return 0; 229 230 page = pte_page(old_pte); 231 if (WARN_ON_ONCE(!page)) 232 return -EINVAL; 233 234 /* 235 * Skip the per-arena scratch page. A kernel fault on an unallocated uaddr 236 * scratches its PTE. A later bpf_arena_free_pages() over that range walks 237 * here. Without the skip, scratch_page would be freed. 238 */ 239 if (page == d->arena->scratch_page) 240 return 0; 241 242 __llist_add(&page->pcp_llist, d->free_pages); 243 WRITE_ONCE(d->arena->nr_pages, d->arena->nr_pages - 1); 244 return 0; 245 } 246 247 static int apply_range_set_scratch_cb(pte_t *pte, unsigned long addr, void *data) 248 { 249 struct page *scratch_page = data; 250 251 if (!pte_none(ptep_get(pte))) 252 return 0; 253 /* 254 * Best-effort install. ptep_try_set() returns false only if another 255 * installer (real allocation or concurrent fault) won the cmpxchg. 256 * Their PTE is already valid, so the access retry succeeds. 257 * 258 * No flush_tlb_kernel_range() needed. Stale "not mapped" entries just 259 * cause one extra re-fault through this same path. 260 */ 261 ptep_try_set(pte, mk_pte(scratch_page, PAGE_KERNEL)); 262 return 0; 263 } 264 265 static int populate_pgtable_except_pte(struct bpf_arena *arena) 266 { 267 /* Populate intermediates for the recovery range (4 GiB + upper half-guard). */ 268 return apply_to_page_range(&init_mm, bpf_arena_get_kern_vm_start(arena), 269 SZ_4G + GUARD_SZ / 2, apply_range_set_cb, NULL); 270 } 271 272 static struct bpf_map *arena_map_alloc(union bpf_attr *attr) 273 { 274 struct vm_struct *kern_vm; 275 int numa_node = bpf_map_attr_numa_node(attr); 276 struct bpf_arena *arena; 277 u64 vm_range; 278 int err = -ENOMEM; 279 280 if (!bpf_jit_supports_arena()) 281 return ERR_PTR(-EOPNOTSUPP); 282 283 if (attr->key_size || attr->value_size || attr->max_entries == 0 || 284 /* BPF_F_MMAPABLE must be set */ 285 !(attr->map_flags & BPF_F_MMAPABLE) || 286 /* No unsupported flags present */ 287 (attr->map_flags & ~(BPF_F_SEGV_ON_FAULT | BPF_F_MMAPABLE | BPF_F_NO_USER_CONV))) 288 return ERR_PTR(-EINVAL); 289 290 if (attr->map_extra & ~PAGE_MASK) 291 /* If non-zero the map_extra is an expected user VMA start address */ 292 return ERR_PTR(-EINVAL); 293 294 vm_range = (u64)attr->max_entries * PAGE_SIZE; 295 if (vm_range > SZ_4G) 296 return ERR_PTR(-E2BIG); 297 298 if ((attr->map_extra >> 32) != ((attr->map_extra + vm_range - 1) >> 32)) 299 /* user vma must not cross 32-bit boundary */ 300 return ERR_PTR(-ERANGE); 301 302 kern_vm = get_vm_area(KERN_VM_SZ, VM_SPARSE | VM_USERMAP); 303 if (!kern_vm) 304 return ERR_PTR(-ENOMEM); 305 306 arena = bpf_map_area_alloc(sizeof(*arena), numa_node); 307 if (!arena) 308 goto err; 309 310 arena->kern_vm = kern_vm; 311 arena->user_vm_start = attr->map_extra; 312 if (arena->user_vm_start) 313 arena->user_vm_end = arena->user_vm_start + vm_range; 314 315 INIT_LIST_HEAD(&arena->vma_list); 316 init_llist_head(&arena->free_spans); 317 init_irq_work(&arena->free_irq, arena_free_irq); 318 INIT_WORK(&arena->free_work, arena_free_worker); 319 bpf_map_init_from_attr(&arena->map, attr); 320 321 arena->scratch_page = bpf_alloc_page(NUMA_NO_NODE, true); 322 if (!arena->scratch_page) 323 goto err_free_arena; 324 325 range_tree_init(&arena->rt); 326 err = range_tree_set(&arena->rt, 0, attr->max_entries); 327 if (err) 328 goto err_free_scratch; 329 mutex_init(&arena->lock); 330 mutex_init(&arena->zap_mutex); 331 raw_res_spin_lock_init(&arena->spinlock); 332 err = populate_pgtable_except_pte(arena); 333 if (err) 334 goto err_destroy_rt; 335 336 return &arena->map; 337 338 err_destroy_rt: 339 range_tree_destroy(&arena->rt); 340 err_free_scratch: 341 __free_page(arena->scratch_page); 342 err_free_arena: 343 bpf_map_area_free(arena); 344 err: 345 free_vm_area(kern_vm); 346 return ERR_PTR(err); 347 } 348 349 static int existing_page_cb(pte_t *ptep, unsigned long addr, void *data) 350 { 351 struct bpf_arena *arena = data; 352 struct page *page; 353 pte_t pte; 354 355 pte = ptep_get(ptep); 356 if (!pte_present(pte)) /* sanity check */ 357 return 0; 358 page = pte_page(pte); 359 /* 360 * Skip the scratch page. The walk is page-table-driven, not range-tree-driven, 361 * so it can visit scratch PTEs at uaddrs the BPF program never allocated. 362 */ 363 if (page == arena->scratch_page) 364 return 0; 365 /* 366 * We do not update pte here: 367 * 1. Nobody should be accessing bpf_arena's range outside of a kernel bug 368 * 2. TLB flushing is batched or deferred. Even if we clear pte, 369 * the TLB entries can stick around and continue to permit access to 370 * the freed page. So it all relies on 1. 371 */ 372 __free_page(page); 373 return 0; 374 } 375 376 static void arena_map_free(struct bpf_map *map) 377 { 378 struct bpf_arena *arena = container_of(map, struct bpf_arena, map); 379 380 /* 381 * Check that user vma-s are not around when bpf map is freed. 382 * mmap() holds vm_file which holds bpf_map refcnt. 383 * munmap() must have happened on vma followed by arena_vm_close() 384 * which would clear arena->vma_list. 385 */ 386 if (WARN_ON_ONCE(!list_empty(&arena->vma_list))) 387 return; 388 389 /* Ensure no pending deferred frees */ 390 irq_work_sync(&arena->free_irq); 391 flush_work(&arena->free_work); 392 393 /* 394 * free_vm_area() calls remove_vm_area() that calls free_unmap_vmap_area(). 395 * It unmaps everything from vmalloc area and clears pgtables. 396 * Call apply_to_existing_page_range() first to find populated ptes and 397 * free those pages. 398 */ 399 apply_to_existing_page_range(&init_mm, bpf_arena_get_kern_vm_start(arena), 400 SZ_4G + GUARD_SZ / 2, existing_page_cb, arena); 401 free_vm_area(arena->kern_vm); 402 range_tree_destroy(&arena->rt); 403 __free_page(arena->scratch_page); 404 bpf_map_area_free(arena); 405 } 406 407 static void *arena_map_lookup_elem(struct bpf_map *map, void *key) 408 { 409 return ERR_PTR(-EINVAL); 410 } 411 412 static long arena_map_update_elem(struct bpf_map *map, void *key, 413 void *value, u64 flags) 414 { 415 return -EOPNOTSUPP; 416 } 417 418 static int arena_map_check_btf(struct bpf_map *map, const struct btf *btf, 419 const struct btf_type *key_type, const struct btf_type *value_type) 420 { 421 return 0; 422 } 423 424 static u64 arena_map_mem_usage(const struct bpf_map *map) 425 { 426 struct bpf_arena *arena = container_of(map, struct bpf_arena, map); 427 428 return (u64)READ_ONCE(arena->nr_pages) << PAGE_SHIFT; 429 } 430 431 struct vma_list { 432 struct vm_area_struct *vma; 433 struct list_head head; 434 refcount_t mmap_count; 435 u64 zap_gen; 436 }; 437 438 static int remember_vma(struct bpf_arena *arena, struct vm_area_struct *vma) 439 { 440 struct vma_list *vml; 441 442 vml = kmalloc_obj(*vml); 443 if (!vml) 444 return -ENOMEM; 445 refcount_set(&vml->mmap_count, 1); 446 vma->vm_private_data = vml; 447 vml->vma = vma; 448 vml->zap_gen = 0; 449 list_add(&vml->head, &arena->vma_list); 450 return 0; 451 } 452 453 static void arena_vm_open(struct vm_area_struct *vma) 454 { 455 struct vma_list *vml = vma->vm_private_data; 456 457 refcount_inc(&vml->mmap_count); 458 } 459 460 static int arena_vm_may_split(struct vm_area_struct *vma, unsigned long addr) 461 { 462 return -EINVAL; 463 } 464 465 static int arena_vm_mremap(struct vm_area_struct *vma) 466 { 467 return -EINVAL; 468 } 469 470 static void arena_vm_close(struct vm_area_struct *vma) 471 { 472 struct bpf_map *map = vma->vm_file->private_data; 473 struct bpf_arena *arena = container_of(map, struct bpf_arena, map); 474 struct vma_list *vml = vma->vm_private_data; 475 476 if (!refcount_dec_and_test(&vml->mmap_count)) 477 return; 478 guard(mutex)(&arena->lock); 479 /* update link list under lock */ 480 list_del(&vml->head); 481 vma->vm_private_data = NULL; 482 kfree(vml); 483 } 484 485 static vm_fault_t arena_vm_fault(struct vm_fault *vmf) 486 { 487 struct bpf_map *map = vmf->vma->vm_file->private_data; 488 struct bpf_arena *arena = container_of(map, struct bpf_arena, map); 489 struct mem_cgroup *new_memcg, *old_memcg; 490 LLIST_HEAD(pages); 491 struct page *page, *new_page = NULL; 492 struct apply_range_data data; 493 vm_fault_t fault_ret; 494 long kbase, kaddr; 495 unsigned long flags; 496 int ret; 497 498 kbase = bpf_arena_get_kern_vm_start(arena); 499 kaddr = kbase + (u32)(vmf->address); 500 501 page = vmalloc_to_page((void *)kaddr); 502 if (!page && !(arena->map.map_flags & BPF_F_SEGV_ON_FAULT)) { 503 /* 504 * Preallocate outside the lock so the allocation can reclaim; 505 * __GFP_RETRY_MAYFAIL keeps the OOM killer out of it. 506 */ 507 bpf_map_memcg_enter(&arena->map, &old_memcg, &new_memcg); 508 new_page = alloc_pages_node(map->numa_node, 509 GFP_KERNEL | __GFP_ZERO | 510 __GFP_ACCOUNT | __GFP_NOWARN | 511 __GFP_RETRY_MAYFAIL, 0); 512 bpf_map_memcg_exit(old_memcg, new_memcg); 513 } 514 515 if (raw_res_spin_lock_irqsave(&arena->spinlock, flags)) { 516 /* 517 * A failed lock means a possible deadlock was detected. Don't 518 * return VM_FAULT_RETRY: this handler never took mmap_lock, but 519 * the fault path would re-take it on retry and deadlock. Fail. 520 */ 521 if (new_page) 522 free_pages_nolock(new_page, 0); 523 return VM_FAULT_SIGBUS; 524 } 525 526 page = vmalloc_to_page((void *)kaddr); 527 if (page) { 528 if (page == arena->scratch_page) { 529 /* BPF triggered scratch here; don't lazy-alloc over it */ 530 fault_ret = (arena->map.map_flags & BPF_F_SEGV_ON_FAULT) 531 ? VM_FAULT_SIGSEGV : VM_FAULT_SIGBUS; 532 goto out_err_locked; 533 } 534 /* already have a page vmap-ed */ 535 goto out; 536 } 537 538 if (arena->map.map_flags & BPF_F_SEGV_ON_FAULT) { 539 /* 540 * User space requested to segfault when page is not allocated 541 * by bpf prog 542 */ 543 fault_ret = VM_FAULT_SIGSEGV; 544 goto out_err_locked; 545 } 546 547 if (is_range_tree_set(&arena->rt, vmf->pgoff, 1)) { 548 /* Allocated without a page: reserved or being freed */ 549 fault_ret = VM_FAULT_SIGBUS; 550 goto out_err_locked; 551 } 552 553 bpf_map_memcg_enter(&arena->map, &old_memcg, &new_memcg); 554 555 if (!new_page) { 556 /* 557 * The probed page was freed meanwhile or preallocation failed; 558 * try the non-blocking allocator, we cannot sleep here. 559 */ 560 new_page = bpf_alloc_page(map->numa_node, false); 561 if (!new_page) { 562 fault_ret = VM_FAULT_SIGBUS; 563 goto out_err_locked_memcg; 564 } 565 } 566 567 ret = range_tree_clear(&arena->rt, vmf->pgoff, 1); 568 if (ret) { 569 fault_ret = VM_FAULT_SIGBUS; 570 goto out_err_locked_memcg; 571 } 572 llist_add(&new_page->pcp_llist, &pages); 573 data.arena = arena; 574 data.pages = &pages; 575 data.i = 0; 576 577 ret = apply_to_page_range(&init_mm, kaddr, PAGE_SIZE, apply_range_set_cb, &data); 578 if (ret) { 579 llist_del_first(&pages); 580 range_tree_set(&arena->rt, vmf->pgoff, 1); 581 fault_ret = VM_FAULT_SIGBUS; 582 goto out_err_locked_memcg; 583 } 584 flush_vmap_cache(kaddr, PAGE_SIZE); 585 bpf_map_memcg_exit(old_memcg, new_memcg); 586 /* new_page was consumed */ 587 page = new_page; 588 new_page = NULL; 589 out: 590 page_ref_add(page, 1); 591 raw_res_spin_unlock_irqrestore(&arena->spinlock, flags); 592 if (new_page) 593 free_pages_nolock(new_page, 0); 594 595 /* 596 * A free clears the kernel pte and then takes the page lock before it 597 * zaps user vma-s. Either it waits for this fault and zaps its pte, or 598 * the page is gone from here. 599 */ 600 lock_page(page); 601 if (vmalloc_to_page((void *)kaddr) == page && !PageHWPoison(page)) { 602 vmf->page = page; 603 return VM_FAULT_LOCKED; 604 } 605 /* The page was freed meanwhile. Let the fault start over. */ 606 fault_ret = PageHWPoison(page) ? VM_FAULT_HWPOISON : VM_FAULT_NOPAGE; 607 unlock_page(page); 608 put_page(page); 609 return fault_ret; 610 611 out_err_locked_memcg: 612 bpf_map_memcg_exit(old_memcg, new_memcg); 613 out_err_locked: 614 raw_res_spin_unlock_irqrestore(&arena->spinlock, flags); 615 if (new_page) 616 free_pages_nolock(new_page, 0); 617 return fault_ret; 618 } 619 620 static const struct vm_operations_struct arena_vm_ops = { 621 .open = arena_vm_open, 622 .may_split = arena_vm_may_split, 623 .mremap = arena_vm_mremap, 624 .close = arena_vm_close, 625 .fault = arena_vm_fault, 626 }; 627 628 static unsigned long arena_get_unmapped_area(struct file *filp, unsigned long addr, 629 unsigned long len, unsigned long pgoff, 630 unsigned long flags) 631 { 632 struct bpf_map *map = filp->private_data; 633 struct bpf_arena *arena = container_of(map, struct bpf_arena, map); 634 unsigned long ret; 635 636 if (pgoff) 637 return -EINVAL; 638 if (len > (u64)map->max_entries * PAGE_SIZE) 639 return -E2BIG; 640 641 /* if user_vm_start was specified at arena creation time */ 642 if (arena->user_vm_start) { 643 if (len > arena->user_vm_end - arena->user_vm_start) 644 return -E2BIG; 645 if (len != arena->user_vm_end - arena->user_vm_start) 646 return -EINVAL; 647 if (addr != arena->user_vm_start) 648 return -EINVAL; 649 } 650 651 /* 652 * Without MAP_FIXED the mm finds a free range. Ask for twice the 653 * length, so that there is room for round_up(). With MAP_FIXED the mm 654 * does no search, and the caller wants this address. Thus the range 655 * cannot move. 656 */ 657 ret = mm_get_unmapped_area(filp, addr, flags & MAP_FIXED ? len : len * 2, 0, flags); 658 if (IS_ERR_VALUE(ret)) 659 return ret; 660 if (!ret) 661 /* user_vm_start == 0 means that the user range is not set yet */ 662 return -EINVAL; 663 if ((ret >> 32) == ((ret + len - 1) >> 32)) 664 return ret; 665 if (flags & MAP_FIXED) 666 return -EINVAL; 667 return round_up(ret, SZ_4G); 668 } 669 670 static int arena_map_mmap(struct bpf_map *map, struct vm_area_struct *vma) 671 { 672 struct bpf_arena *arena = container_of(map, struct bpf_arena, map); 673 674 guard(mutex)(&arena->lock); 675 if (arena->user_vm_start && arena->user_vm_start != vma->vm_start) 676 /* 677 * If map_extra was not specified at arena creation time then 678 * 1st user process can do mmap(NULL, ...) to pick user_vm_start 679 * 2nd user process must pass the same addr to mmap(addr, MAP_FIXED..); 680 * or 681 * specify addr in map_extra and 682 * use the same addr later with mmap(addr, MAP_FIXED..); 683 */ 684 return -EBUSY; 685 686 if (arena->user_vm_end && arena->user_vm_end != vma->vm_end) 687 /* all user processes must have the same size of mmap-ed region */ 688 return -EBUSY; 689 690 /* Earlier checks should prevent this */ 691 if (WARN_ON_ONCE(vma_pages(vma) > map->max_entries || vma->vm_pgoff)) 692 return -EFAULT; 693 694 if (remember_vma(arena, vma)) 695 return -ENOMEM; 696 697 arena->user_vm_start = vma->vm_start; 698 arena->user_vm_end = vma->vm_end; 699 /* 700 * bpf_map_mmap() checks that it's being mmaped as VM_SHARED and 701 * clears VM_MAYEXEC. Set VM_DONTEXPAND to avoid potential change 702 * of user_vm_start. Set VM_DONTCOPY to prevent arena VMA from 703 * being copied into the child process on fork. 704 * This is a kernel page so set VM_MIXEDMAP. 705 */ 706 vm_flags_set(vma, VM_MIXEDMAP | VM_DONTEXPAND | VM_DONTCOPY); 707 vma->vm_ops = &arena_vm_ops; 708 return 0; 709 } 710 711 static int arena_map_direct_value_addr(const struct bpf_map *map, u64 *imm, u32 off) 712 { 713 struct bpf_arena *arena = container_of(map, struct bpf_arena, map); 714 715 if ((u64)off >= arena->user_vm_end - arena->user_vm_start) 716 return -ERANGE; 717 *imm = (unsigned long)arena->user_vm_start; 718 return 0; 719 } 720 721 BTF_ID_LIST_SINGLE(bpf_arena_map_btf_ids, struct, bpf_arena) 722 const struct bpf_map_ops arena_map_ops = { 723 .map_meta_equal = bpf_map_meta_equal, 724 .map_alloc = arena_map_alloc, 725 .map_free = arena_map_free, 726 .map_direct_value_addr = arena_map_direct_value_addr, 727 .map_mmap = arena_map_mmap, 728 .map_get_unmapped_area = arena_get_unmapped_area, 729 .map_get_next_key = arena_map_get_next_key, 730 .map_push_elem = arena_map_push_elem, 731 .map_peek_elem = arena_map_peek_elem, 732 .map_pop_elem = arena_map_pop_elem, 733 .map_lookup_elem = arena_map_lookup_elem, 734 .map_update_elem = arena_map_update_elem, 735 .map_delete_elem = arena_map_delete_elem, 736 .map_check_btf = arena_map_check_btf, 737 .map_mem_usage = arena_map_mem_usage, 738 .map_btf_id = &bpf_arena_map_btf_ids[0], 739 }; 740 741 static u64 clear_lo32(u64 val) 742 { 743 return val & ~(u64)~0U; 744 } 745 746 static int arena_adjust_tree(struct bpf_arena *arena, long uaddr, long page_cnt, long *pgoff) 747 { 748 int ret; 749 750 /* Special case where user is requesting specific range. */ 751 if (uaddr) { 752 ret = is_range_tree_set(&arena->rt, *pgoff, page_cnt); 753 if (ret) 754 return ret; 755 return range_tree_clear(&arena->rt, *pgoff, page_cnt); 756 } 757 758 ret = range_tree_find(&arena->rt, page_cnt); 759 if (ret < 0) 760 return ret; 761 762 *pgoff = ret; 763 764 return range_tree_clear(&arena->rt, *pgoff, page_cnt); 765 } 766 767 /* 768 * Allocate pages and vmap them into kernel vmalloc area. 769 * Later the pages will be mmaped into user space vma. 770 */ 771 static long arena_alloc_pages(struct bpf_arena *arena, long uaddr, long page_cnt, int node_id, 772 bool sleepable) 773 { 774 /* user_vm_end/start are fixed before bpf prog runs */ 775 long page_cnt_max = (arena->user_vm_end - arena->user_vm_start) >> PAGE_SHIFT; 776 u64 kern_vm_start = bpf_arena_get_kern_vm_start(arena); 777 struct mem_cgroup *new_memcg, *old_memcg; 778 struct apply_range_data data; 779 LLIST_HEAD(pages); 780 long mapped = 0; 781 unsigned long flags; 782 long pgoff = 0; 783 u32 uaddr32; 784 long addr = 0; 785 int ret; 786 787 if (node_id != NUMA_NO_NODE && 788 ((unsigned int)node_id >= nr_node_ids || !node_online(node_id))) 789 return 0; 790 791 if (page_cnt > page_cnt_max) 792 return 0; 793 794 if (uaddr) { 795 if (uaddr & ~PAGE_MASK) 796 return 0; 797 pgoff = compute_pgoff(arena, uaddr); 798 if (pgoff > page_cnt_max - page_cnt) 799 /* requested address will be outside of user VMA */ 800 return 0; 801 } 802 bpf_map_memcg_enter(&arena->map, &old_memcg, &new_memcg); 803 804 ret = bpf_alloc_pages(node_id, page_cnt, &pages, sleepable); 805 if (ret) 806 goto out_memcg; 807 808 data.arena = arena; 809 data.pages = &pages; 810 data.i = 0; 811 812 if (raw_res_spin_lock_irqsave(&arena->spinlock, flags)) 813 goto out_free_pages; 814 815 ret = arena_adjust_tree(arena, uaddr, page_cnt, &pgoff); 816 if (ret) { 817 raw_res_spin_unlock_irqrestore(&arena->spinlock, flags); 818 goto out_free_pages; 819 } 820 821 uaddr32 = (u32)(arena->user_vm_start + pgoff * PAGE_SIZE); 822 823 /* 824 * Earlier checks made sure that uaddr32 + page_cnt * PAGE_SIZE - 1 825 * will not overflow 32-bit. Lower 32-bit need to represent 826 * contiguous user address range. 827 * Map these pages at kern_vm_start base. 828 * kern_vm_start + uaddr32 + page_cnt * PAGE_SIZE - 1 can overflow 829 * lower 32-bit and it's ok. 830 */ 831 ret = apply_to_page_range(&init_mm, kern_vm_start + uaddr32, 832 page_cnt << PAGE_SHIFT, apply_range_set_cb, &data); 833 mapped = data.i; 834 if (ret) 835 goto out_unmap; 836 837 flush_vmap_cache(kern_vm_start + uaddr32, mapped << PAGE_SHIFT); 838 raw_res_spin_unlock_irqrestore(&arena->spinlock, flags); 839 840 addr = clear_lo32(arena->user_vm_start) + uaddr32; 841 goto out_memcg; 842 843 out_unmap: 844 /* Error handling: Undo partial mappings. */ 845 flush_vmap_cache(kern_vm_start + uaddr32, mapped << PAGE_SHIFT); 846 range_tree_set(&arena->rt, pgoff + mapped, page_cnt - mapped); 847 raw_res_spin_unlock_irqrestore(&arena->spinlock, flags); 848 if (mapped) 849 arena_free_pages(arena, uaddr32, mapped, sleepable); 850 851 out_free_pages: 852 /* Error handling: Free back any unmapped pages. */ 853 bpf_free_pages(&pages); 854 855 out_memcg: 856 bpf_map_memcg_exit(old_memcg, new_memcg); 857 858 return addr; 859 } 860 861 /* 862 * If page is present in vmalloc area, unmap it from vmalloc area, 863 * unmap it from all user space vma-s, 864 * and free it. 865 */ 866 static void zap_pages(struct bpf_arena *arena, long uaddr, long page_cnt) 867 { 868 unsigned long size = (unsigned long)page_cnt << PAGE_SHIFT; 869 struct vm_area_struct *vma; 870 struct mm_struct *mm; 871 struct vma_list *vml; 872 unsigned long vm_start; 873 u64 my_gen; 874 875 /* 876 * Taking mmap_read_lock() under arena->lock would deadlock against 877 * arena_vm_close(), which runs with mmap_write_lock held and then 878 * acquires arena->lock. Drop arena->lock for mmap_read_lock(). 879 * 880 * Use per-call my_gen, recorded in vml->zap_gen, to remember which 881 * vmls this invocation has already processed across the lock drop. 882 * Hold zap_mutex around the whole walk so concurrent zap_pages() 883 * callers cannot overwrite each other's marks on shared vmls -- 884 * otherwise call B's mark would make call A skip a vml that A has 885 * not yet zapped for A's uaddr range. 886 */ 887 lockdep_assert_held(&arena->zap_mutex); 888 mutex_lock(&arena->lock); 889 my_gen = ++arena->zap_gen; 890 for (;;) { 891 mm = NULL; 892 list_for_each_entry(vml, &arena->vma_list, head) { 893 if (vml->zap_gen >= my_gen) 894 continue; 895 vml->zap_gen = my_gen; 896 if (!mmget_not_zero(vml->vma->vm_mm)) 897 continue; 898 mm = vml->vma->vm_mm; 899 vm_start = vml->vma->vm_start; 900 break; 901 } 902 if (!mm) 903 break; 904 mutex_unlock(&arena->lock); 905 906 mmap_read_lock(mm); 907 /* 908 * Re-resolve: while we waited the VMA could have been unmapped 909 * and a different mapping installed at the same address. 910 */ 911 vma = find_vma(mm, vm_start); 912 if (vma && vma->vm_start == vm_start && 913 vma->vm_file && vma->vm_file->private_data == &arena->map) 914 zap_vma_range(vma, uaddr, size); 915 mmap_read_unlock(mm); 916 mmput(mm); 917 918 mutex_lock(&arena->lock); 919 } 920 mutex_unlock(&arena->lock); 921 } 922 923 /* 924 * The range stays allocated in the range tree until the pages are unmapped 925 * from vmalloc area and from all user space vma-s, so that nobody can 926 * populate it while stale TLB entries or user ptes are still around. 927 */ 928 static int arena_free_range(struct bpf_arena *arena, long uaddr, long page_cnt) 929 { 930 u64 full_uaddr = clear_lo32(arena->user_vm_start) + uaddr; 931 long kaddr = bpf_arena_get_kern_vm_start(arena) + uaddr; 932 long pgoff = compute_pgoff(arena, uaddr); 933 struct clear_range_data cdata; 934 struct llist_node *pos, *t; 935 LLIST_HEAD(free_pages); 936 unsigned long flags; 937 struct page *page; 938 int ret; 939 940 /* An overlapping free must not release the range before this one is done */ 941 guard(mutex)(&arena->zap_mutex); 942 943 ret = raw_res_spin_lock_irqsave(&arena->spinlock, flags); 944 if (ret) 945 return ret; 946 947 /* 948 * Take the free pages of the range too. It allocates, and can fail, 949 * only when the whole range is free. Then there is nothing to do. 950 */ 951 if (range_tree_clear(&arena->rt, pgoff, page_cnt)) { 952 raw_res_spin_unlock_irqrestore(&arena->spinlock, flags); 953 return 0; 954 } 955 956 cdata.arena = arena; 957 cdata.free_pages = &free_pages; 958 /* clear ptes and collect struct pages */ 959 apply_to_existing_page_range(&init_mm, kaddr, page_cnt << PAGE_SHIFT, 960 apply_range_clear_cb, &cdata); 961 962 /* drop the lock to do the tlb flush and zap pages */ 963 raw_res_spin_unlock_irqrestore(&arena->spinlock, flags); 964 965 /* wait for arena_vm_fault() that found the page before its pte was cleared */ 966 llist_for_each_entry(page, free_pages.first, pcp_llist) { 967 lock_page(page); 968 unlock_page(page); 969 } 970 971 /* ensure no stale TLB entries */ 972 flush_tlb_kernel_range(kaddr, kaddr + (page_cnt * PAGE_SIZE)); 973 974 if (page_cnt > 1) 975 /* bulk zap if multiple pages being freed */ 976 zap_pages(arena, full_uaddr, page_cnt); 977 978 llist_for_each_safe(pos, t, __llist_del_all(&free_pages)) { 979 page = llist_entry(pos, struct page, pcp_llist); 980 if (page_cnt == 1 && page_ref_count(page) > 1) /* maybe mapped by user space */ 981 /* Optimization for the common case of page_cnt==1: 982 * If page wasn't mapped into some user vma there 983 * is no need to call zap_pages which is slow. When 984 * page_cnt is big it's faster to do the batched zap. 985 */ 986 zap_pages(arena, full_uaddr, 1); 987 __free_page(page); 988 } 989 990 /* The callers hold no other rqspinlock, so this one can only time out */ 991 while (raw_res_spin_lock_irqsave(&arena->spinlock, flags)) 992 cond_resched(); 993 range_tree_set(&arena->rt, pgoff, page_cnt); 994 raw_res_spin_unlock_irqrestore(&arena->spinlock, flags); 995 return 0; 996 } 997 998 static void arena_free_pages(struct bpf_arena *arena, long uaddr, long page_cnt, bool sleepable) 999 { 1000 /* The first mmap() may be setting the user range right now */ 1001 u64 user_vm_start = READ_ONCE(arena->user_vm_start); 1002 struct mem_cgroup *new_memcg, *old_memcg; 1003 u64 full_uaddr, uaddr_end; 1004 struct arena_free_span *s; 1005 1006 /* only aligned lower 32-bit are relevant */ 1007 uaddr = (u32)uaddr; 1008 uaddr &= PAGE_MASK; 1009 full_uaddr = clear_lo32(user_vm_start) + uaddr; 1010 if (!user_vm_start || full_uaddr < user_vm_start) 1011 return; 1012 uaddr_end = min(arena->user_vm_end, full_uaddr + (page_cnt << PAGE_SHIFT)); 1013 if (full_uaddr >= uaddr_end) 1014 return; 1015 1016 page_cnt = (uaddr_end - full_uaddr) >> PAGE_SHIFT; 1017 bpf_map_memcg_enter(&arena->map, &old_memcg, &new_memcg); 1018 1019 /* Can't proceed without holding the spinlock so defer the free */ 1020 if (!sleepable || arena_free_range(arena, uaddr, page_cnt)) 1021 goto defer; 1022 1023 bpf_map_memcg_exit(old_memcg, new_memcg); 1024 return; 1025 1026 defer: 1027 s = kmalloc_nolock(sizeof(struct arena_free_span), __GFP_ACCOUNT, -1); 1028 bpf_map_memcg_exit(old_memcg, new_memcg); 1029 if (!s) 1030 /* 1031 * If allocation fails in non-sleepable context, pages are intentionally left 1032 * inaccessible (leaked) until the arena is destroyed. Cleanup or retries are not 1033 * possible here, so we intentionally omit them for safety. 1034 */ 1035 return; 1036 1037 s->page_cnt = page_cnt; 1038 s->uaddr = uaddr; 1039 llist_add(&s->node, &arena->free_spans); 1040 irq_work_queue(&arena->free_irq); 1041 } 1042 1043 /* 1044 * Reserve an arena virtual address range without populating it. This call stops 1045 * bpf_arena_alloc_pages from adding pages to this range. 1046 */ 1047 static int arena_reserve_pages(struct bpf_arena *arena, long uaddr, u32 page_cnt) 1048 { 1049 long page_cnt_max = (arena->user_vm_end - arena->user_vm_start) >> PAGE_SHIFT; 1050 struct mem_cgroup *new_memcg, *old_memcg; 1051 unsigned long flags; 1052 long pgoff; 1053 int ret; 1054 1055 if (uaddr & ~PAGE_MASK) 1056 return 0; 1057 1058 pgoff = compute_pgoff(arena, uaddr); 1059 if (pgoff + page_cnt > page_cnt_max) 1060 return -EINVAL; 1061 1062 if (raw_res_spin_lock_irqsave(&arena->spinlock, flags)) 1063 return -EBUSY; 1064 1065 /* Cannot guard already allocated pages. */ 1066 ret = is_range_tree_set(&arena->rt, pgoff, page_cnt); 1067 if (ret) { 1068 ret = -EBUSY; 1069 goto out; 1070 } 1071 1072 /* "Allocate" the region to prevent it from being allocated. */ 1073 bpf_map_memcg_enter(&arena->map, &old_memcg, &new_memcg); 1074 ret = range_tree_clear(&arena->rt, pgoff, page_cnt); 1075 bpf_map_memcg_exit(old_memcg, new_memcg); 1076 out: 1077 raw_res_spin_unlock_irqrestore(&arena->spinlock, flags); 1078 return ret; 1079 } 1080 1081 static void arena_free_worker(struct work_struct *work) 1082 { 1083 struct bpf_arena *arena = container_of(work, struct bpf_arena, free_work); 1084 struct mem_cgroup *new_memcg, *old_memcg; 1085 struct llist_node *pos, *t; 1086 struct arena_free_span *s; 1087 1088 bpf_map_memcg_enter(&arena->map, &old_memcg, &new_memcg); 1089 1090 llist_for_each_safe(pos, t, llist_del_all(&arena->free_spans)) { 1091 s = llist_entry(pos, struct arena_free_span, node); 1092 while (arena_free_range(arena, s->uaddr, s->page_cnt)) 1093 cond_resched(); 1094 kfree_nolock(s); 1095 } 1096 1097 bpf_map_memcg_exit(old_memcg, new_memcg); 1098 } 1099 1100 static void arena_free_irq(struct irq_work *iw) 1101 { 1102 struct bpf_arena *arena = container_of(iw, struct bpf_arena, free_irq); 1103 1104 schedule_work(&arena->free_work); 1105 } 1106 1107 __bpf_kfunc_start_defs(); 1108 1109 __bpf_kfunc void *bpf_arena_alloc_pages(void *p__map, void *addr__ign, u32 page_cnt, 1110 int node_id, u64 flags) 1111 { 1112 struct bpf_map *map = p__map; 1113 struct bpf_arena *arena = container_of(map, struct bpf_arena, map); 1114 1115 if (map->map_type != BPF_MAP_TYPE_ARENA || flags || !page_cnt) 1116 return NULL; 1117 1118 return (void *)arena_alloc_pages(arena, (long)addr__ign, page_cnt, node_id, true); 1119 } 1120 1121 void *bpf_arena_alloc_pages_non_sleepable(void *p__map, void *addr__ign, u32 page_cnt, 1122 int node_id, u64 flags) 1123 { 1124 struct bpf_map *map = p__map; 1125 struct bpf_arena *arena = container_of(map, struct bpf_arena, map); 1126 1127 if (map->map_type != BPF_MAP_TYPE_ARENA || flags || !page_cnt) 1128 return NULL; 1129 1130 return (void *)arena_alloc_pages(arena, (long)addr__ign, page_cnt, node_id, false); 1131 } 1132 1133 void *bpf_arena_alloc_pages_sleepable(void *p__map, void *addr__ign, u32 page_cnt, 1134 int node_id, u64 flags) 1135 { 1136 struct bpf_map *map = p__map; 1137 struct bpf_arena *arena = container_of(map, struct bpf_arena, map); 1138 1139 if (map->map_type != BPF_MAP_TYPE_ARENA || flags || !page_cnt) 1140 return NULL; 1141 1142 return (void *)arena_alloc_pages(arena, (long)addr__ign, page_cnt, node_id, true); 1143 } 1144 1145 __bpf_kfunc void bpf_arena_free_pages(void *p__map, void *ptr__ign, u32 page_cnt) 1146 { 1147 struct bpf_map *map = p__map; 1148 struct bpf_arena *arena = container_of(map, struct bpf_arena, map); 1149 1150 if (map->map_type != BPF_MAP_TYPE_ARENA || !page_cnt || !ptr__ign) 1151 return; 1152 arena_free_pages(arena, (long)ptr__ign, page_cnt, true); 1153 } 1154 1155 void bpf_arena_free_pages_non_sleepable(void *p__map, void *ptr__ign, u32 page_cnt) 1156 { 1157 struct bpf_map *map = p__map; 1158 struct bpf_arena *arena = container_of(map, struct bpf_arena, map); 1159 1160 if (map->map_type != BPF_MAP_TYPE_ARENA || !page_cnt || !ptr__ign) 1161 return; 1162 arena_free_pages(arena, (long)ptr__ign, page_cnt, false); 1163 } 1164 1165 __bpf_kfunc int bpf_arena_reserve_pages(void *p__map, void *ptr__ign, u32 page_cnt) 1166 { 1167 struct bpf_map *map = p__map; 1168 struct bpf_arena *arena = container_of(map, struct bpf_arena, map); 1169 1170 if (map->map_type != BPF_MAP_TYPE_ARENA) 1171 return -EINVAL; 1172 1173 if (!page_cnt) 1174 return 0; 1175 1176 return arena_reserve_pages(arena, (long)ptr__ign, page_cnt); 1177 } 1178 __bpf_kfunc_end_defs(); 1179 1180 BTF_KFUNCS_START(arena_kfuncs) 1181 BTF_ID_FLAGS(func, bpf_arena_alloc_pages, KF_ARENA_RET | KF_ARENA_ARG2 | KF_SPINLOCK_SAFE) 1182 BTF_ID_FLAGS(func, bpf_arena_free_pages, KF_ARENA_ARG2 | KF_SPINLOCK_SAFE) 1183 BTF_ID_FLAGS(func, bpf_arena_reserve_pages, KF_ARENA_ARG2 | KF_SPINLOCK_SAFE) 1184 BTF_KFUNCS_END(arena_kfuncs) 1185 1186 static const struct btf_kfunc_id_set common_kfunc_set = { 1187 .owner = THIS_MODULE, 1188 .set = &arena_kfuncs, 1189 }; 1190 1191 static int __init kfunc_init(void) 1192 { 1193 return register_btf_kfunc_id_set(BPF_PROG_TYPE_UNSPEC, &common_kfunc_set); 1194 } 1195 late_initcall(kfunc_init); 1196 1197 static void __bpf_prog_report_arena_violation(struct bpf_prog *prog, bool write, 1198 unsigned long addr, unsigned long fault_ip) 1199 { 1200 struct bpf_stream_stage ss; 1201 u64 user_vm_start; 1202 1203 /* Use main prog for stream access */ 1204 prog = prog->aux->main_prog_aux->prog; 1205 1206 user_vm_start = bpf_arena_get_user_vm_start(prog->aux->arena); 1207 addr += clear_lo32(user_vm_start); 1208 1209 bpf_stream_stage(ss, prog, BPF_STDERR, ({ 1210 bpf_stream_printk(ss, "ERROR: Arena %s access at unmapped address 0x%lx\n", 1211 write ? "WRITE" : "READ", addr); 1212 bpf_stream_dump_stack(ss); 1213 })); 1214 } 1215 1216 bool bpf_arena_handle_page_fault(unsigned long addr, bool is_write, unsigned long fault_ip) 1217 { 1218 struct bpf_arena *arena; 1219 struct bpf_prog *prog; 1220 unsigned long kbase; 1221 unsigned long page_addr = addr & PAGE_MASK; 1222 1223 prog = bpf_prog_find_from_stack(); 1224 if (!prog) 1225 return false; 1226 1227 arena = prog->aux->arena; 1228 /* a prog not using arena may be on stack, so arena can be NULL */ 1229 if (!arena) 1230 return false; 1231 1232 kbase = bpf_arena_get_kern_vm_start(arena); 1233 1234 /* 1235 * Recovery covers the 4 GiB mappable band plus the upper half-guard. 1236 * Lower guard is unreachable from kfuncs; an address there indicates 1237 * a different bug class - leave it to the regular kernel oops path. 1238 */ 1239 if (page_addr < kbase || page_addr >= kbase + SZ_4G + GUARD_SZ / 2) 1240 return false; 1241 1242 apply_to_page_range(&init_mm, page_addr, PAGE_SIZE, 1243 apply_range_set_scratch_cb, arena->scratch_page); 1244 flush_vmap_cache(page_addr, PAGE_SIZE); 1245 __bpf_prog_report_arena_violation(prog, is_write, page_addr - kbase, fault_ip); 1246 return true; 1247 } 1248 1249 void bpf_prog_report_arena_violation(bool write, unsigned long addr, unsigned long fault_ip) 1250 { 1251 struct bpf_prog *prog; 1252 1253 /* 1254 * The RCU read lock is held to safely traverse the latch tree, but we 1255 * don't need its protection when accessing the prog, since it will not 1256 * disappear while we are handling the fault. 1257 */ 1258 rcu_read_lock(); 1259 prog = bpf_prog_ksym_find(fault_ip); 1260 rcu_read_unlock(); 1261 if (!prog) 1262 return; 1263 __bpf_prog_report_arena_violation(prog, write, addr, fault_ip); 1264 } 1265