]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
bpf: verifier: make kfuncs args nullalble
authorVadim Fedorenko <vadfed@meta.com>
Thu, 13 Jun 2024 21:18:13 +0000 (14:18 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 13 Jun 2024 23:33:04 +0000 (16:33 -0700)
Some arguments to kfuncs might be NULL in some cases. But currently it's
not possible to pass NULL to any BTF structures because the check for
the suffix is located after all type checks. Move it to earlier place
to allow nullable args.

Acked-by: Eduard Zingerman <eddyz87@gmail.com>
Signed-off-by: Vadim Fedorenko <vadfed@meta.com>
Link: https://lore.kernel.org/r/20240613211817.1551967-2-vadfed@meta.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/verifier.c

index acc9dd830807884aa0fdbf4a637fb59c132171ab..e857b08e1f2d56752fd64a86541d3b160662d6e4 100644 (file)
@@ -11187,6 +11187,9 @@ get_kfunc_ptr_arg_type(struct bpf_verifier_env *env,
        if (btf_is_prog_ctx_type(&env->log, meta->btf, t, resolve_prog_type(env->prog), argno))
                return KF_ARG_PTR_TO_CTX;
 
+       if (is_kfunc_arg_nullable(meta->btf, &args[argno]) && register_is_null(reg))
+               return KF_ARG_PTR_TO_NULL;
+
        if (is_kfunc_arg_alloc_obj(meta->btf, &args[argno]))
                return KF_ARG_PTR_TO_ALLOC_BTF_ID;
 
@@ -11232,9 +11235,6 @@ get_kfunc_ptr_arg_type(struct bpf_verifier_env *env,
        if (is_kfunc_arg_callback(env, meta->btf, &args[argno]))
                return KF_ARG_PTR_TO_CALLBACK;
 
-       if (is_kfunc_arg_nullable(meta->btf, &args[argno]) && register_is_null(reg))
-               return KF_ARG_PTR_TO_NULL;
-
        if (argno + 1 < nargs &&
            (is_kfunc_arg_mem_size(meta->btf, &args[argno + 1], &regs[regno + 1]) ||
             is_kfunc_arg_const_mem_size(meta->btf, &args[argno + 1], &regs[regno + 1])))