bpf: mark PTR_TO_MEM as non-null register type
authorAndrii Nakryiko <andrii@kernel.org>
Thu, 2 Mar 2023 23:50:08 +0000 (15:50 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Sat, 4 Mar 2023 19:14:32 +0000 (11:14 -0800)
PTR_TO_MEM register without PTR_MAYBE_NULL is indeed non-null. This is
important for BPF verifier to be able to prune guaranteed not to be
taken branches. This is always the case with open-coded iterators.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/r/20230302235015.2044271-11-andrii@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/verifier.c

index ed9a96a..d95975c 100644 (file)
@@ -487,7 +487,8 @@ static bool reg_type_not_null(enum bpf_reg_type type)
                type == PTR_TO_TCP_SOCK ||
                type == PTR_TO_MAP_VALUE ||
                type == PTR_TO_MAP_KEY ||
-               type == PTR_TO_SOCK_COMMON;
+               type == PTR_TO_SOCK_COMMON ||
+               type == PTR_TO_MEM;
 }
 
 static bool type_is_ptr_alloc_obj(u32 type)