There are two possible mismatched alloc and free cases in BPF memory
allocator:
1) allocate from cache X but free by cache Y with a different unit_size
2) allocate from per-cpu cache but free by kmalloc cache or vice versa
So add more WARN_ON_ONCE checks in free_bulk() and __free_by_rcu() to
spot these mismatched alloc and free early.
Signed-off-by: Hou Tao <houtao1@huawei.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20231021014959.3563841-1-houtao@huaweicloud.com
 
        int cnt;
 
        WARN_ON_ONCE(tgt->unit_size != c->unit_size);
+       WARN_ON_ONCE(tgt->percpu_size != c->percpu_size);
 
        do {
                inc_active(c, &flags);
        struct bpf_mem_cache *tgt = c->tgt;
        struct llist_node *llnode;
 
+       WARN_ON_ONCE(tgt->unit_size != c->unit_size);
+       WARN_ON_ONCE(tgt->percpu_size != c->percpu_size);
+
        llnode = llist_del_all(&c->waiting_for_gp);
        if (!llnode)
                goto out;