bpf: Convert PTR_TO_MEM_OR_NULL to composable types.
authorHao Luo <haoluo@google.com>
Thu, 28 Apr 2022 23:57:47 +0000 (16:57 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 1 May 2022 15:22:25 +0000 (17:22 +0200)
commit cf9f2f8d62eca810afbd1ee6cc0800202b000e57 upstream.

Remove PTR_TO_MEM_OR_NULL and replace it with PTR_TO_MEM combined with
flag PTR_MAYBE_NULL.

Signed-off-by: Hao Luo <haoluo@google.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20211217003152.48334-7-haoluo@google.com
Cc: stable@vger.kernel.org # 5.15.x
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/linux/bpf.h
kernel/bpf/btf.c
kernel/bpf/verifier.c

index 83c28c6..1cb5aae 100644 (file)
@@ -502,7 +502,6 @@ enum bpf_reg_type {
        PTR_TO_SOCK_COMMON_OR_NULL      = PTR_MAYBE_NULL | PTR_TO_SOCK_COMMON,
        PTR_TO_TCP_SOCK_OR_NULL         = PTR_MAYBE_NULL | PTR_TO_TCP_SOCK,
        PTR_TO_BTF_ID_OR_NULL           = PTR_MAYBE_NULL | PTR_TO_BTF_ID,
-       PTR_TO_MEM_OR_NULL              = PTR_MAYBE_NULL | PTR_TO_MEM,
 
        /* This must be the last entry. Its purpose is to ensure the enum is
         * wide enough to hold the higher bits reserved for bpf_type_flag.
index 9247dfc..c2ecea3 100644 (file)
@@ -5719,7 +5719,7 @@ int btf_prepare_func_args(struct bpf_verifier_env *env, int subprog,
                                return -EINVAL;
                        }
 
-                       reg->type = PTR_TO_MEM_OR_NULL;
+                       reg->type = PTR_TO_MEM | PTR_MAYBE_NULL;
                        reg->id = ++env->id_gen;
 
                        continue;
index 0de4a94..0aff2e4 100644 (file)
@@ -13135,7 +13135,7 @@ static int do_check_common(struct bpf_verifier_env *env, int subprog)
                                mark_reg_known_zero(env, regs, i);
                        else if (regs[i].type == SCALAR_VALUE)
                                mark_reg_unknown(env, regs, i);
-                       else if (regs[i].type == PTR_TO_MEM_OR_NULL) {
+                       else if (base_type(regs[i].type) == PTR_TO_MEM) {
                                const u32 mem_size = regs[i].mem_size;
 
                                mark_reg_known_zero(env, regs, i);