diff options
author | Alexei Starovoitov <ast@kernel.org> | 2021-12-13 09:26:50 -0800 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2021-12-13 09:41:36 -0800 |
commit | e94fac3829ddd3d9f21efa27d1512215b630782c (patch) | |
tree | 7ade7429fb7c8cbbc59ee6a8b5b347e8bd099e95 /kernel/bpf/btf.c | |
parent | 4b443bc1785f28df56fdbd6a107dc68ef7d5aa8e (diff) | |
parent | 006004b715569f742535f70f3f06b41d8135486c (diff) |
Merge branch 'bpf: Add helpers to access traced function arguments'
Jiri Olsa says:
====================
Add new helpers to access traced function arguments that
came out of the trampoline batch changes [1].
Get n-th argument of the traced function:
long bpf_get_func_arg(void *ctx, u32 n, u64 *value)
Get return value of the traced function:
long bpf_get_func_ret(void *ctx, u64 *value)
Get arguments count of the traced funtion:
long bpf_get_func_arg_cnt(void *ctx)
v2 changes:
- added acks
- updated stack diagram
- return -EOPNOTSUPP instead of -EINVAL in bpf_get_func_ret
- removed gpl_only for all helpers
- added verifier fix to allow proper arguments checks,
Andrii asked for checking also 'int *b' argument in
bpf_modify_return_test programs and it turned out that it's currently
not supported by verifier - we can't read argument that is int pointer,
so I had to add verifier change to allow that + adding verifier selftest
- checking all arguments in bpf_modify_return_test test programs
- moved helpers proto gets in tracing_prog_func_proto with attach type check
thanks,
jirka
[1] https://lore.kernel.org/bpf/20211118112455.475349-1-jolsa@kernel.org/
====================
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'kernel/bpf/btf.c')
-rw-r--r-- | kernel/bpf/btf.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index 65231045a5294..a17de71abd2e6 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -4826,7 +4826,7 @@ struct btf *bpf_prog_get_target_btf(const struct bpf_prog *prog) return prog->aux->attach_btf; } -static bool is_string_ptr(struct btf *btf, const struct btf_type *t) +static bool is_int_ptr(struct btf *btf, const struct btf_type *t) { /* t comes in already as a pointer */ t = btf_type_by_id(btf, t->type); @@ -4835,8 +4835,7 @@ static bool is_string_ptr(struct btf *btf, const struct btf_type *t) if (BTF_INFO_KIND(t->info) == BTF_KIND_CONST) t = btf_type_by_id(btf, t->type); - /* char, signed char, unsigned char */ - return btf_type_is_int(t) && t->size == 1; + return btf_type_is_int(t); } bool btf_ctx_access(int off, int size, enum bpf_access_type type, @@ -4957,7 +4956,7 @@ bool btf_ctx_access(int off, int size, enum bpf_access_type type, */ return true; - if (is_string_ptr(btf, t)) + if (is_int_ptr(btf, t)) return true; /* this is a pointer to another type */ |