On Wed, Aug 11, 2021 at 4:41 PM Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> wrote: > > On Wed, Aug 11, 2021 at 3:40 PM Hao Luo <haoluo@xxxxxxxxxx> wrote: > > > > Currently weak typeless ksyms have default value zero, when they don't > > exist in the kernel. However, weak typed ksyms are rejected by libbpf > > if they can not be resolved. This means that if a bpf object contains > > the declaration of a nonexistent weak typed ksym, it will be rejected > > even if there is no program that references the symbol. > > > > Nonexistent weak typed ksyms can also default to zero just like > > typeless ones. This allows programs that access weak typed ksyms to be > > accepted by verifier, if the accesses are guarded. For example, > > > > extern const int bpf_link_fops3 __ksym __weak; > > > > /* then in BPF program */ > > > > if (&bpf_link_fops3) { > > /* use bpf_link_fops3 */ > > } > > > > If actual use of nonexistent typed ksym is not guarded properly, > > verifier would see that register is not PTR_TO_BTF_ID and wouldn't > > allow to use it for direct memory reads or passing it to BPF helpers. > > > > Signed-off-by: Hao Luo <haoluo@xxxxxxxxxx> > > --- Thanks for taking a look! All the comments seem reasonable. Let me fix them, test and send a new version. > > Changes since v1: > > - Weak typed symbols default to zero, as suggested by Andrii. > > - Use ASSERT_XXX() for tests. > > > > tools/lib/bpf/libbpf.c | 17 ++++-- > > .../selftests/bpf/prog_tests/ksyms_btf.c | 31 ++++++++++ > > .../selftests/bpf/progs/test_ksyms_weak.c | 57 +++++++++++++++++++ > > 3 files changed, 100 insertions(+), 5 deletions(-) > > create mode 100644 tools/testing/selftests/bpf/progs/test_ksyms_weak.c > > [...]