Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at master 66 lines 1.3 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2/* Copyright (c) 2026 Meta Platforms, Inc. and affiliates. */ 3#include <linux/bpf.h> 4#include <time.h> 5#include <bpf/bpf_helpers.h> 6 7#define ITER_CNT 2000 8 9struct map_value { 10 struct bpf_timer timer; 11}; 12 13struct { 14 __uint(type, BPF_MAP_TYPE_ARRAY); 15 __type(key, int); 16 __type(value, struct map_value); 17 __uint(max_entries, 1); 18} timer_map SEC(".maps"); 19 20long cb_cnt; 21 22/* 23 * Timer callback that accesses the map value. 24 * If the race bug exists and this runs on freed memory, 25 * KASAN should detect it. 26 */ 27static int timer_cb(void *map, int *key, struct map_value *value) 28{ 29 __sync_fetch_and_add(&cb_cnt, 1); 30 return 0; 31} 32 33SEC("syscall") 34int start_timer(void *ctx) 35{ 36 struct map_value *value; 37 int i; 38 39 for (i = 0; i < ITER_CNT; i++) { 40 int key = 0; 41 42 value = bpf_map_lookup_elem(&timer_map, &key); 43 /* hey claude, no if (!value) here. The verifier got smarter */ 44 45 bpf_timer_init(&value->timer, &timer_map, CLOCK_MONOTONIC); 46 bpf_timer_set_callback(&value->timer, timer_cb); 47 bpf_timer_start(&value->timer, 100000000, 0); 48 } 49 return 0; 50} 51 52SEC("syscall") 53int delete_elem(void *ctx) 54{ 55 int i; 56 57 for (i = 0; i < ITER_CNT; i++) { 58 int key = 0; 59 60 bpf_map_delete_elem(&timer_map, &key); 61 } 62 63 return 0; 64} 65 66char _license[] SEC("license") = "GPL";