Message ID | 20230407084608.62296-1-zhoufeng.zf@bytedance.com (mailing list archive) |
---|---|
Headers | show |
Series | Fix failure to access u32* argument of tracked function | expand |
On Fri, Apr 07, 2023 at 04:46:06PM +0800, Feng zhou wrote: > From: Feng Zhou <zhoufeng.zf@bytedance.com> > > When access traced function arguments with type is u32*, bpf verifier failed. > Because u32 have typedef, needs to skip modifier. Add btf_type_is_modifier in > is_int_ptr. Add a selftest to check it. > > Feng Zhou (2): > bpf/btf: Fix is_int_ptr() > selftests/bpf: Add test to access u32 ptr argument in tracing program hi, it breaks several tests in test_progs suite: #11/36 bpf_iter/link-iter:FAIL #11 bpf_iter:FAIL test_dummy_st_ops_attach:FAIL:dummy_st_ops_load unexpected error: -13 #63/1 dummy_st_ops/dummy_st_ops_attach:FAIL test_dummy_init_ret_value:FAIL:dummy_st_ops_load unexpected error: -13 #63/2 dummy_st_ops/dummy_init_ret_value:FAIL test_dummy_init_ptr_arg:FAIL:dummy_st_ops_load unexpected error: -13 #63/3 dummy_st_ops/dummy_init_ptr_arg:FAIL test_dummy_multiple_args:FAIL:dummy_st_ops_load unexpected error: -13 #63/4 dummy_st_ops/dummy_multiple_args:FAIL test_dummy_sleepable:FAIL:dummy_st_ops_load unexpected error: -13 #63/5 dummy_st_ops/dummy_sleepable:FAIL #63 dummy_st_ops:FAIL test_fentry_fexit:FAIL:fentry_skel_load unexpected error: -13 #69 fentry_fexit:FAIL test_fentry_test:FAIL:fentry_skel_load unexpected error: -13 #70 fentry_test:FAIL jirka > > Changelog: > v1->v2: Addressed comments from Martin KaFai Lau > - Add a selftest. > - use btf_type_skip_modifiers. > Some details in here: > https://lore.kernel.org/all/20221012125815.76120-1-zhouchengming@bytedance.com/ > > kernel/bpf/btf.c | 5 ++--- > net/bpf/test_run.c | 8 +++++++- > .../testing/selftests/bpf/verifier/btf_ctx_access.c | 13 +++++++++++++ > 3 files changed, 22 insertions(+), 4 deletions(-) > > -- > 2.20.1 >
在 2023/4/7 18:49, Feng Zhou 写道: > 在 2023/4/7 17:33, Jiri Olsa 写道: >> On Fri, Apr 07, 2023 at 04:46:06PM +0800, Feng zhou wrote: >>> From: Feng Zhou<zhoufeng.zf@bytedance.com> >>> >>> When access traced function arguments with type is u32*, bpf >>> verifier failed. >>> Because u32 have typedef, needs to skip modifier. Add >>> btf_type_is_modifier in >>> is_int_ptr. Add a selftest to check it. >>> >>> Feng Zhou (2): >>> bpf/btf: Fix is_int_ptr() >>> selftests/bpf: Add test to access u32 ptr argument in tracing >>> program >> hi, >> it breaks several tests in test_progs suite: >> >> #11/36 bpf_iter/link-iter:FAIL >> #11 bpf_iter:FAIL >> test_dummy_st_ops_attach:FAIL:dummy_st_ops_load unexpected error: -13 >> #63/1 dummy_st_ops/dummy_st_ops_attach:FAIL >> test_dummy_init_ret_value:FAIL:dummy_st_ops_load unexpected error: -13 >> #63/2 dummy_st_ops/dummy_init_ret_value:FAIL >> test_dummy_init_ptr_arg:FAIL:dummy_st_ops_load unexpected error: -13 >> #63/3 dummy_st_ops/dummy_init_ptr_arg:FAIL >> test_dummy_multiple_args:FAIL:dummy_st_ops_load unexpected error: -13 >> #63/4 dummy_st_ops/dummy_multiple_args:FAIL >> test_dummy_sleepable:FAIL:dummy_st_ops_load unexpected error: -13 >> #63/5 dummy_st_ops/dummy_sleepable:FAIL >> #63 dummy_st_ops:FAIL >> test_fentry_fexit:FAIL:fentry_skel_load unexpected error: -13 >> #69 fentry_fexit:FAIL >> test_fentry_test:FAIL:fentry_skel_load unexpected error: -13 >> #70 fentry_test:FAIL >> >> jirka >> > > I tried it, and it did cause the test to fail. Bpfverify reported an > error, > 'R1 invalid mem access'scalar', let me confirm the reason. I used btf_type_skip_modifiers,but did not delete the previous "t = btf_type_by_id (btf, t- > type);" resulting in some testcases failing. I will send a v3 nextweek, thank you for your suggestion. >>> Changelog: >>> v1->v2: Addressed comments from Martin KaFai Lau >>> - Add a selftest. >>> - use btf_type_skip_modifiers. >>> Some details in here: >>> https://lore.kernel.org/all/20221012125815.76120-1-zhouchengming@bytedance.com/ >>> >>> >>> kernel/bpf/btf.c | 5 ++--- >>> net/bpf/test_run.c | 8 +++++++- >>> .../testing/selftests/bpf/verifier/btf_ctx_access.c | 13 >>> +++++++++++++ >>> 3 files changed, 22 insertions(+), 4 deletions(-) >>> >>> -- >>> 2.20.1 >>> >
From: Feng Zhou <zhoufeng.zf@bytedance.com> When access traced function arguments with type is u32*, bpf verifier failed. Because u32 have typedef, needs to skip modifier. Add btf_type_is_modifier in is_int_ptr. Add a selftest to check it. Feng Zhou (2): bpf/btf: Fix is_int_ptr() selftests/bpf: Add test to access u32 ptr argument in tracing program Changelog: v1->v2: Addressed comments from Martin KaFai Lau - Add a selftest. - use btf_type_skip_modifiers. Some details in here: https://lore.kernel.org/all/20221012125815.76120-1-zhouchengming@bytedance.com/ kernel/bpf/btf.c | 5 ++--- net/bpf/test_run.c | 8 +++++++- .../testing/selftests/bpf/verifier/btf_ctx_access.c | 13 +++++++++++++ 3 files changed, 22 insertions(+), 4 deletions(-)