Re: [PATCH bpf-next v2 00/16] selftests/bpf: Add Memory Sanitizer support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Feb 9, 2023 at 4:12 PM Ilya Leoshkevich <iii@xxxxxxxxxxxxx> wrote:
>
> v1: https://lore.kernel.org/bpf/20230208205642.270567-1-iii@xxxxxxxxxxxxx/
> v1 -> v2:
> - Apply runqslower's EXTRA_CFLAGS and EXTRA_LDFLAGS unconditionally.
> - Use u64 for uretprobe_byname2_rc.
> - Use BPF_UPROBE() instead of PT_REGS_xxx().
> - Use void * instead of char * for pointer arithmetic.
> - Rename libbpf_mark_defined() to __libbpf_mark_mem_written(), add
>   convenience wrappers.
> - Add a comment about defined(__has_feature) &&
>   __has_feature(memory_sanitizer).
> - Extract is_percpu_bpf_map_type().
> - Introduce bpf_get_{map,prog,link,btf}_info_by_fd() and convert all
>   code to use them. If it's too early for that, in particular for
>   samples and perf, the respective patches can be dropped.

perf is too early, the rest is fine

I applied first 7 patches for now, I'll go review the rest a bit later.

> - Unpoison infos returned by these functions, paying attention to
>   potentially missing fields. Use macros to reduce boilerplate.
> - Move capget() unpoisoning to LLVM [5].
> - With that, only a few cases remain where data needs to be
>   unpoisoned in selftests.
>
> Hi,
>
> This series adds support for building selftests with Memory Sanitizer
> [1] - a compiler instrumentation for detecting usages of undefined
> memory.
>
> The primary motivation is to make sure that such usages do not occur
> during testing, since the ones that have not been caught yet are likely
> to affect the CI results on s390x. The secondary motivation is to be
> able to use libbpf in applications instrumented with MSan (it requires
> all code running in a process to be instrumented).
>
> MSan has found one real issue (fixed by patch 7), and of course a
> number of false positives. This rest of this series deals with
> preparing the build infrastructure and adding MSan annotations to
> libbpf and selftests.
>
> The setup I'm using is as follows:
>
> - Instrumented zlib-ng and patched elfutils [2].
> - Patched LLVM [3, 4, 5].
> - Clang-built kernel.
> - Building tests with MSan:
>
>       make \
>           -C tools/testing/selftests/bpf \
>           CC="ccache clang-17" \
>           LD=ld \
>           HOSTCC="ccache clang-17" \
>           HOSTLD=ld \
>           LLVM=1 \
>           LLVM_SUFFIX=-17 \
>           OBJCOPY=objcopy \
>           CLANG="ccache clang-17" \
>           LLVM_STRIP=llvm-strip-17 \
>           LLC=llc-17 \
>           BPF_GCC= \
>           SAN_CFLAGS="-fsanitize=memory \
>                       -fsanitize-memory-track-origins \
>                       -I$PWD/../zlib-ng/dist/include \
>                       -I$PWD/../elfutils/dist/include" \
>           SAN_LDFLAGS="-fsanitize=memory \
>                        -fsanitize-memory-track-origins \
>                        -L$PWD/../zlib-ng/dist/lib \
>                        -L$PWD/../elfutils/dist/lib" \
>           CROSS_COMPILE=s390x-linux-gnu-
>
>   It's a lot of options, but most of them are trivial: setting up LLVM
>   toolchain, taking in account s390x quirks, setting up MSan and
>   disabling bpf-gcc. The CROSS_COMPILE one is a hack: instrumenting
>   bpftool turned out to be too complicated from the build system
>   perspective, so having CROSS_COMPILE forces compiling the host libbpf
>   uninstrumented and guest libbpf instrumented.
>
> - Running tests with MSan on s390x:
>
>       LD_LIBRARY_PATH=<instrumented libs> ./test_progs
>       ...
>       Summary: 282/1624 PASSED, 23 SKIPPED, 4 FAILED
>
>   The 4 failures happen without MSan too, they are already known and
>   denylisted.
>
> Best regards,
> Ilya
>
> [1] https://clang.llvm.org/docs/MemorySanitizer.html
> [2] https://sourceware.org/pipermail/elfutils-devel/2023q1/005831.html
> [3] https://reviews.llvm.org/D143296
> [4] https://reviews.llvm.org/D143330
> [5] https://reviews.llvm.org/D143660
>
> Ilya Leoshkevich (16):
>   selftests/bpf: Quote host tools
>   tools: runqslower: Add EXTRA_CFLAGS and EXTRA_LDFLAGS support
>   selftests/bpf: Split SAN_CFLAGS and SAN_LDFLAGS
>   selftests/bpf: Forward SAN_CFLAGS and SAN_LDFLAGS to runqslower and
>     libbpf
>   selftests/bpf: Attach to fopen()/fclose() in uprobe_autoattach
>   selftests/bpf: Attach to fopen()/fclose() in attach_probe
>   libbpf: Fix alen calculation in libbpf_nla_dump_errormsg()
>   libbpf: Introduce bpf_{btf,link,map,prog}_get_info_by_fd()
>   libbpf: Use bpf_{btf,link,map,prog}_get_info_by_fd()
>   bpftool: Use bpf_{btf,link,map,prog}_get_info_by_fd()
>   perf: Use bpf_{btf,link,map,prog}_get_info_by_fd()
>   samples/bpf: Use bpf_{btf,link,map,prog}_get_info_by_fd()
>   selftests/bpf: Use bpf_{btf,link,map,prog}_get_info_by_fd()
>   libbpf: Factor out is_percpu_bpf_map_type()
>   libbpf: Add MSan annotations
>   selftests/bpf: Add MSan annotations
>
>  samples/bpf/test_map_in_map_user.c            |   2 +-
>  samples/bpf/xdp1_user.c                       |   2 +-
>  samples/bpf/xdp_adjust_tail_user.c            |   2 +-
>  samples/bpf/xdp_fwd_user.c                    |   4 +-
>  samples/bpf/xdp_redirect_cpu_user.c           |   4 +-
>  samples/bpf/xdp_rxq_info_user.c               |   2 +-
>  samples/bpf/xdp_sample_pkts_user.c            |   2 +-
>  samples/bpf/xdp_tx_iptunnel_user.c            |   2 +-
>  tools/bpf/bpftool/btf.c                       |  13 +-
>  tools/bpf/bpftool/btf_dumper.c                |   4 +-
>  tools/bpf/bpftool/cgroup.c                    |   4 +-
>  tools/bpf/bpftool/common.c                    |  13 +-
>  tools/bpf/bpftool/link.c                      |   4 +-
>  tools/bpf/bpftool/main.h                      |   3 +-
>  tools/bpf/bpftool/map.c                       |   8 +-
>  tools/bpf/bpftool/prog.c                      |  24 +--
>  tools/bpf/bpftool/struct_ops.c                |   6 +-
>  tools/bpf/runqslower/Makefile                 |   2 +
>  tools/lib/bpf/bpf.c                           | 179 +++++++++++++++++-
>  tools/lib/bpf/bpf.h                           |  13 ++
>  tools/lib/bpf/btf.c                           |   9 +-
>  tools/lib/bpf/libbpf.c                        |  26 +--
>  tools/lib/bpf/libbpf.map                      |   5 +
>  tools/lib/bpf/libbpf_internal.h               |  46 +++++
>  tools/lib/bpf/netlink.c                       |   2 +-
>  tools/lib/bpf/nlattr.c                        |   2 +-
>  tools/lib/bpf/ringbuf.c                       |   4 +-
>  tools/perf/util/bpf-utils.c                   |   4 +-
>  tools/perf/util/bpf_counter.c                 |   2 +-
>  tools/perf/util/bpf_counter.h                 |   6 +-
>  tools/testing/selftests/bpf/Makefile          |  17 +-
>  .../bpf/map_tests/map_in_map_batch_ops.c      |   2 +-
>  .../selftests/bpf/prog_tests/attach_probe.c   |  10 +-
>  .../selftests/bpf/prog_tests/bpf_iter.c       |   8 +-
>  .../selftests/bpf/prog_tests/bpf_obj_id.c     |  20 +-
>  .../selftests/bpf/prog_tests/bpf_tcp_ca.c     |   3 +
>  tools/testing/selftests/bpf/prog_tests/btf.c  |  24 +--
>  .../selftests/bpf/prog_tests/btf_map_in_map.c |   2 +-
>  .../selftests/bpf/prog_tests/check_mtu.c      |   2 +-
>  .../selftests/bpf/prog_tests/enable_stats.c   |   2 +-
>  .../selftests/bpf/prog_tests/fexit_bpf2bpf.c  |  14 +-
>  .../bpf/prog_tests/flow_dissector_reattach.c  |  10 +-
>  .../bpf/prog_tests/libbpf_get_fd_by_id_opts.c |   4 +-
>  .../selftests/bpf/prog_tests/lsm_cgroup.c     |   3 +-
>  .../selftests/bpf/prog_tests/metadata.c       |   8 +-
>  tools/testing/selftests/bpf/prog_tests/mmap.c |   2 +-
>  .../selftests/bpf/prog_tests/perf_link.c      |   2 +-
>  .../selftests/bpf/prog_tests/pinning.c        |   2 +-
>  .../selftests/bpf/prog_tests/prog_run_opts.c  |   2 +-
>  .../selftests/bpf/prog_tests/recursion.c      |   4 +-
>  .../selftests/bpf/prog_tests/send_signal.c    |   2 +
>  .../selftests/bpf/prog_tests/sockmap_basic.c  |   6 +-
>  .../bpf/prog_tests/task_local_storage.c       |   8 +-
>  .../testing/selftests/bpf/prog_tests/tc_bpf.c |   4 +-
>  .../bpf/prog_tests/tp_attach_query.c          |   9 +-
>  .../bpf/prog_tests/unpriv_bpf_disabled.c      |   8 +-
>  .../bpf/prog_tests/uprobe_autoattach.c        |  14 +-
>  .../selftests/bpf/prog_tests/verif_stats.c    |   5 +-
>  .../selftests/bpf/prog_tests/xdp_attach.c     |   4 +-
>  .../selftests/bpf/prog_tests/xdp_bonding.c    |   3 +
>  .../bpf/prog_tests/xdp_cpumap_attach.c        |   8 +-
>  .../bpf/prog_tests/xdp_devmap_attach.c        |   8 +-
>  .../selftests/bpf/prog_tests/xdp_info.c       |   2 +-
>  .../selftests/bpf/prog_tests/xdp_link.c       |  10 +-
>  .../selftests/bpf/progs/test_attach_probe.c   |  11 +-
>  .../bpf/progs/test_uprobe_autoattach.c        |  16 +-
>  tools/testing/selftests/bpf/test_maps.c       |   2 +-
>  .../selftests/bpf/test_skb_cgroup_id_user.c   |   2 +-
>  .../bpf/test_tcp_check_syncookie_user.c       |   2 +-
>  tools/testing/selftests/bpf/test_verifier.c   |   8 +-
>  tools/testing/selftests/bpf/testing_helpers.c |   2 +-
>  tools/testing/selftests/bpf/xdp_synproxy.c    |  15 +-
>  72 files changed, 478 insertions(+), 211 deletions(-)
>
> --
> 2.39.1
>



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux