]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
bpf: Tidy verifier bug message
authorPaul Chaignon <paul.chaignon@gmail.com>
Mon, 11 Aug 2025 18:58:20 +0000 (20:58 +0200)
committerAndrii Nakryiko <andrii@kernel.org>
Tue, 12 Aug 2025 22:50:40 +0000 (15:50 -0700)
Yonghong noticed that error messages for potential verifier bugs often
have a '(1)' at the end. This is happening because verifier_bug_if(cond,
env, fmt, args...) prints "(" #cond ")\n" as part of the message and
verifier_bug() is defined as:

  #define verifier_bug(env, fmt, args...) verifier_bug_if(1, env, fmt, ##args)

Hence, verifier_bug() always ends up displaying '(1)'. This small patch
fixes it by having verifier_bug_if conditionally call verifier_bug
instead of the other way around.

Fixes: 1cb0f56d9618 ("bpf: WARN_ONCE on verifier bugs")
Reported-by: Yonghong Song <yonghong.song@linux.dev>
Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Tested-by: Eduard Zingerman <eddyz87@gmail.com>
Acked-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/bpf/aJo9THBrzo8jFXsh@mail.gmail.com
include/linux/bpf_verifier.h

index c823f8efe3edd2650137f9804f93a44e34029ce3..020de62bd09cdd6e4692354192c747f32e7cc323 100644 (file)
@@ -875,13 +875,15 @@ __printf(3, 4) void verbose_linfo(struct bpf_verifier_env *env,
 #define verifier_bug_if(cond, env, fmt, args...)                                               \
        ({                                                                                      \
                bool __cond = (cond);                                                           \
-               if (unlikely(__cond)) {                                                         \
-                       BPF_WARN_ONCE(1, "verifier bug: " fmt "(" #cond ")\n", ##args);         \
-                       bpf_log(&env->log, "verifier bug: " fmt "(" #cond ")\n", ##args);       \
-               }                                                                               \
+               if (unlikely(__cond))                                                           \
+                       verifier_bug(env, fmt " (" #cond ")", ##args);                          \
                (__cond);                                                                       \
        })
-#define verifier_bug(env, fmt, args...) verifier_bug_if(1, env, fmt, ##args)
+#define verifier_bug(env, fmt, args...)                                                                \
+       ({                                                                                      \
+               BPF_WARN_ONCE(1, "verifier bug: " fmt "\n", ##args);                            \
+               bpf_log(&env->log, "verifier bug: " fmt "\n", ##args);                          \
+       })
 
 static inline struct bpf_func_state *cur_func(struct bpf_verifier_env *env)
 {