diff options
| author | Martin KaFai Lau <kafai@fb.com> | 2018-03-24 14:44:23 -0400 |
|---|---|---|
| committer | Daniel Borkmann <daniel@iogearbox.net> | 2018-03-26 03:58:17 -0400 |
| commit | 77d2e05abd45886dcad2b632c738cf46b9f7c19e (patch) | |
| tree | dab2d5beef6275329e8ed3dbaff7f720d6f05f6c /include/linux/bpf_verifier.h | |
| parent | b9193c1b61ddb97da4713155b0d580e41fb544ac (diff) | |
bpf: Add bpf_verifier_vlog() and bpf_verifier_log_needed()
The BTF (BPF Type Format) verifier needs to reuse the current
BPF verifier log. Hence, it requires the following changes:
(1) Expose log_write() in verifier.c for other users.
Its name is renamed to bpf_verifier_vlog().
(2) The BTF verifier also needs to check
'log->level && log->ubuf && !bpf_verifier_log_full(log);'
independently outside of the current log_write(). It is
because the BTF verifier will do one-check before
making multiple calls to btf_verifier_vlog to log
the details of a type.
Hence, this check is also re-factored to a new function
bpf_verifier_log_needed(). Since it is re-factored,
we can check it before va_start() in the current
bpf_verifier_log_write() and verbose().
Signed-off-by: Martin KaFai Lau <kafai@fb.com>
Acked-by: Alexei Starovoitov <ast@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'include/linux/bpf_verifier.h')
| -rw-r--r-- | include/linux/bpf_verifier.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/include/linux/bpf_verifier.h b/include/linux/bpf_verifier.h index c30668414b22..7e61c395fddf 100644 --- a/include/linux/bpf_verifier.h +++ b/include/linux/bpf_verifier.h | |||
| @@ -166,6 +166,11 @@ static inline bool bpf_verifier_log_full(const struct bpf_verifier_log *log) | |||
| 166 | return log->len_used >= log->len_total - 1; | 166 | return log->len_used >= log->len_total - 1; |
| 167 | } | 167 | } |
| 168 | 168 | ||
| 169 | static inline bool bpf_verifier_log_needed(const struct bpf_verifier_log *log) | ||
| 170 | { | ||
| 171 | return log->level && log->ubuf && !bpf_verifier_log_full(log); | ||
| 172 | } | ||
| 173 | |||
| 169 | #define BPF_MAX_SUBPROGS 256 | 174 | #define BPF_MAX_SUBPROGS 256 |
| 170 | 175 | ||
| 171 | /* single container for all structs | 176 | /* single container for all structs |
| @@ -192,6 +197,8 @@ struct bpf_verifier_env { | |||
| 192 | u32 subprog_cnt; | 197 | u32 subprog_cnt; |
| 193 | }; | 198 | }; |
| 194 | 199 | ||
| 200 | void bpf_verifier_vlog(struct bpf_verifier_log *log, const char *fmt, | ||
| 201 | va_list args); | ||
| 195 | __printf(2, 3) void bpf_verifier_log_write(struct bpf_verifier_env *env, | 202 | __printf(2, 3) void bpf_verifier_log_write(struct bpf_verifier_env *env, |
| 196 | const char *fmt, ...); | 203 | const char *fmt, ...); |
| 197 | 204 | ||
