bpf: Skip unit_size checking for global per-cpu allocator
authorHou Tao <houtao1@huawei.com>
Wed, 13 Sep 2023 13:59:43 +0000 (21:59 +0800)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 15 Sep 2023 17:22:24 +0000 (10:22 -0700)
For global per-cpu allocator, the size of free object in free list
doesn't match with unit_size and now there is no way to get the size of
per-cpu pointer saved in free object, so just skip the checking.

Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
Closes: https://lore.kernel.org/bpf/20230913133436.0eeec4cb@canb.auug.org.au/
Signed-off-by: Hou Tao <houtao1@huawei.com>
Tested-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://lore.kernel.org/r/20230913135943.3137292-1-houtao@huaweicloud.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/memalloc.c

index 1c22b90..cf19415 100644 (file)
@@ -491,6 +491,13 @@ static int check_obj_size(struct bpf_mem_cache *c, unsigned int idx)
        struct llist_node *first;
        unsigned int obj_size;
 
+       /* For per-cpu allocator, the size of free objects in free list doesn't
+        * match with unit_size and now there is no way to get the size of
+        * per-cpu pointer saved in free object, so just skip the checking.
+        */
+       if (c->percpu_size)
+               return 0;
+
        first = c->free_llist.first;
        if (!first)
                return 0;