Re: [PATCH v10 bpf-next 0/9] Add skb + xdp dynptrs

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

 



On Thu, Feb 16, 2023 at 2:56 PM Joanne Koong <joannelkoong@xxxxxxxxx> wrote:
>
> This patchset is the 2nd in the dynptr series. The 1st can be found here [0].
>
> This patchset adds skb and xdp type dynptrs, which have two main benefits for
> packet parsing:
>     * allowing operations on sizes that are not statically known at
>       compile-time (eg variable-sized accesses).
>     * more ergonomic and less brittle iteration through data (eg does not need
>       manual if checking for being within bounds of data_end)
>
> When comparing the differences in runtime for packet parsing without dynptrs
> vs. with dynptrs, there is no noticeable difference. Patch 9 contains more
> details as well as examples of how to use skb and xdp dynptrs.
>
> [0]
> https://lore.kernel.org/bpf/20220523210712.3641569-1-joannelkoong@xxxxxxxxx/
>
> --

Looks good to me overall, but s390x CI fails, please take a look at [0]

  [0] https://github.com/kernel-patches/bpf/actions/runs/4207628899/jobs/7303067297

> Changelog:
>
> v9 = https://lore.kernel.org/bpf/20230127191703.3864860-1-joannelkoong@xxxxxxxxx/
> v9 -> v10:
>     * Add bpf_dynptr_slice and bpf_dynptr_slice_rdwr interface
>     * Add some more tests
>     * Split up patchset into more parts to make it easier to review
>
> v8 = https://lore.kernel.org/bpf/20230126233439.3739120-1-joannelkoong@xxxxxxxxx/
> v8 -> v9:
>     * Fix dynptr_get_type() to check non-stack dynptrs
>
> v7 = https://lore.kernel.org/bpf/20221021011510.1890852-1-joannelkoong@xxxxxxxxx/
> v7 -> v8:
>     * Change helpers to kfuncs
>     * Add 2 new patches (1/5 and 2/5)
>
> v6 = https://lore.kernel.org/bpf/20220907183129.745846-1-joannelkoong@xxxxxxxxx/
> v6 -> v7
>     * Change bpf_dynptr_data() to return read-only data slices if the skb prog
>       is read-only (Martin)
>     * Add test "skb_invalid_write" to test that writes to rd-only data slices
>       are rejected
>
> v5 = https://lore.kernel.org/bpf/20220831183224.3754305-1-joannelkoong@xxxxxxxxx/
> v5 -> v6
>     * Address kernel test robot errors by static inlining
>
> v4 = https://lore.kernel.org/bpf/20220822235649.2218031-1-joannelkoong@xxxxxxxxx/
> v4 -> v5
>     * Address kernel test robot errors for configs w/out CONFIG_NET set
>     * For data slices, return PTR_TO_MEM instead of PTR_TO_PACKET (Kumar)
>     * Split selftests into subtests (Andrii)
>     * Remove insn patching. Use rdonly and rdwr protos for dynptr skb
>       construction (Andrii)
>     * bpf_dynptr_data() returns NULL for rd-only dynptrs. There will be a
>       separate bpf_dynptr_data_rdonly() added later (Andrii and Kumar)
>
> v3 = https://lore.kernel.org/bpf/20220822193442.657638-1-joannelkoong@xxxxxxxxx/
> v3 -> v4
>     * Forgot to commit --amend the kernel test robot error fixups
>
> v2 = https://lore.kernel.org/bpf/20220811230501.2632393-1-joannelkoong@xxxxxxxxx/
> v2 -> v3
>     * Fix kernel test robot build test errors
>
> v1 = https://lore.kernel.org/bpf/20220726184706.954822-1-joannelkoong@xxxxxxxxx/
> v1 -> v2
>   * Return data slices to rd-only skb dynptrs (Martin)
>   * bpf_dynptr_write allows writes to frags for skb dynptrs, but always
>     invalidates associated data slices (Martin)
>   * Use switch casing instead of ifs (Andrii)
>   * Use 0xFD for experimental kind number in the selftest (Zvi)
>   * Put selftest conversions w/ dynptrs into new files (Alexei)
>   * Add new selftest "test_cls_redirect_dynptr.c"
>
> Joanne Koong (9):
>   bpf: Support "sk_buff" and "xdp_buff" as valid kfunc arg types
>   bpf: Refactor process_dynptr_func
>   bpf: Allow initializing dynptrs in kfuncs
>   bpf: Define no-ops for externally called bpf dynptr functions
>   bpf: Refactor verifier dynptr into get_dynptr_arg_reg
>   bpf: Add skb dynptrs
>   bpf: Add xdp dynptrs
>   bpf: Add bpf_dynptr_slice and bpf_dynptr_slice_rdwr
>   selftests/bpf: tests for using dynptrs to parse skb and xdp buffers
>
>  include/linux/bpf.h                           |  95 +-
>  include/linux/bpf_verifier.h                  |   3 -
>  include/linux/filter.h                        |  46 +
>  include/uapi/linux/bpf.h                      |  18 +-
>  kernel/bpf/btf.c                              |  22 +
>  kernel/bpf/helpers.c                          | 174 +++-
>  kernel/bpf/verifier.c                         | 365 +++++--
>  net/core/filter.c                             | 108 +-
>  tools/include/uapi/linux/bpf.h                |  18 +-
>  .../selftests/bpf/prog_tests/cls_redirect.c   |  25 +
>  .../testing/selftests/bpf/prog_tests/dynptr.c |  69 +-
>  .../selftests/bpf/prog_tests/l4lb_all.c       |   2 +
>  .../bpf/prog_tests/parse_tcp_hdr_opt.c        |  93 ++
>  .../selftests/bpf/prog_tests/xdp_attach.c     |  11 +-
>  .../testing/selftests/bpf/progs/dynptr_fail.c | 274 ++++-
>  .../selftests/bpf/progs/dynptr_success.c      |  51 +-
>  .../bpf/progs/test_cls_redirect_dynptr.c      | 975 ++++++++++++++++++
>  .../bpf/progs/test_l4lb_noinline_dynptr.c     | 486 +++++++++
>  .../bpf/progs/test_parse_tcp_hdr_opt.c        | 119 +++
>  .../bpf/progs/test_parse_tcp_hdr_opt_dynptr.c | 118 +++
>  .../selftests/bpf/progs/test_xdp_dynptr.c     | 257 +++++
>  .../selftests/bpf/test_tcp_hdr_options.h      |   1 +
>  22 files changed, 3151 insertions(+), 179 deletions(-)
>  create mode 100644 tools/testing/selftests/bpf/prog_tests/parse_tcp_hdr_opt.c
>  create mode 100644 tools/testing/selftests/bpf/progs/test_cls_redirect_dynptr.c
>  create mode 100644 tools/testing/selftests/bpf/progs/test_l4lb_noinline_dynptr.c
>  create mode 100644 tools/testing/selftests/bpf/progs/test_parse_tcp_hdr_opt.c
>  create mode 100644 tools/testing/selftests/bpf/progs/test_parse_tcp_hdr_opt_dynptr.c
>  create mode 100644 tools/testing/selftests/bpf/progs/test_xdp_dynptr.c
>
> --
> 2.30.2
>



[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