> diff --git a/mm/bpf_memcontrol.c b/mm/bpf_memcontrol.c > index 2d518ad2ad3f..d84fe6f3ed43 100644 > --- a/mm/bpf_memcontrol.c > +++ b/mm/bpf_memcontrol.c > @@ -78,6 +78,57 @@ __bpf_kfunc void bpf_put_mem_cgroup(struct mem_cgroup *memcg) > css_put(&memcg->css); > } > > +/** > + * bpf_mem_cgroup_vm_events - Read memory cgroup's vm event counter > + * @memcg: memory cgroup > + * @event: event id > + * > + * Allows to read memory cgroup event counters. > + */ > +__bpf_kfunc unsigned long bpf_mem_cgroup_vm_events(struct mem_cgroup *memcg, > + enum vm_event_item event) > +{ > + return memcg_events(memcg, event); > +} Should this function validate the event parameter before passing it to memcg_events()? The call chain bpf_mem_cgroup_vm_events()->memcg_events()->memcg_events_index() reaches an array access in memcg_events_index(): static inline int memcg_events_index(enum vm_event_item idx) { return mem_cgroup_events_index[idx]; } The array mem_cgroup_events_index is declared with size NR_VM_EVENT_ITEMS. If a BPF program passes an event value >= NR_VM_EVENT_ITEMS, this would cause an out-of-bounds array read. For comparison, bpf_mem_cgroup_page_state() below validates its idx parameter before calling memcg_page_state_output(). A similar check here would prevent the potential out-of-bounds access: if (event < 0 || event >= NR_VM_EVENT_ITEMS) return (unsigned long)-1; > + > +/** > + * bpf_mem_cgroup_usage - Read memory cgroup's usage [ ... ] > +__bpf_kfunc unsigned long bpf_mem_cgroup_page_state(struct mem_cgroup *memcg, int idx) > +{ > + if (idx < 0 || idx >= MEMCG_NR_STAT) > + return (unsigned long)-1; > + > + return memcg_page_state_output(memcg, idx); > +} [ ... ] --- AI reviewed your patch. Please fix the bug or email reply why it's not a bug. See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md CI run summary: https://github.com/kernel-patches/bpf/actions/runs/20389033088