Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bpftool sync 2024-04-25 #141

Merged
merged 12 commits into from
Apr 25, 2024

Commits on Apr 2, 2024

  1. bpf: add special internal-only MOV instruction to resolve per-CPU addrs

    Add a new BPF instruction for resolving absolute addresses of per-CPU
    data from their per-CPU offsets. This instruction is internal-only and
    users are not allowed to use them directly. They will only be used for
    internal inlining optimizations for now between BPF verifier and BPF JITs.
    
    We use a special BPF_MOV | BPF_ALU64 | BPF_X form with insn->off field
    set to BPF_ADDR_PERCPU = -1. I used negative offset value to distinguish
    them from positive ones used by user-exposed instructions.
    
    Such instruction performs a resolution of a per-CPU offset stored in
    a register to a valid kernel address which can be dereferenced. It is
    useful in any use case where absolute address of a per-CPU data has to
    be resolved (e.g., in inlining bpf_map_lookup_elem()).
    
    BPF disassembler is also taught to recognize them to support dumping
    final BPF assembly code (non-JIT'ed version).
    
    Add arch-specific way for BPF JITs to mark support for this instructions.
    
    This patch also adds support for these instructions in x86-64 BPF JIT.
    
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Acked-by: John Fastabend <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    anakryiko authored and qmonnet committed Apr 2, 2024
    Configuration menu
    Copy the full SHA
    d0720d4 View commit details
    Browse the repository at this point in the history

Commits on Apr 3, 2024

  1. bpf: Pack struct bpf_fib_lookup

    The struct bpf_fib_lookup is supposed to be of size 64. A recent commit
    59b418c7063d ("bpf: Add a check for struct bpf_fib_lookup size") added
    a static assertion to check this property so that future changes to the
    structure will not accidentally break this assumption.
    
    As it immediately turned out, on some 32-bit arm systems, when AEABI=n,
    the total size of the structure was equal to 68, see [1]. This happened
    because the bpf_fib_lookup structure contains a union of two 16-bit
    fields:
    
        union {
                __u16 tot_len;
                __u16 mtu_result;
        };
    
    which was supposed to compile to a 16-bit-aligned 16-bit field. On the
    aforementioned setups it was instead both aligned and padded to 32-bits.
    
    Declare this inner union as __attribute__((packed, aligned(2))) such
    that it always is of size 2 and is aligned to 16 bits.
    
      [1] https://lore.kernel.org/all/CA+G9fYtsoP51f-oP_Sp5MOq-Ffv8La2RztNpwvE6+R1VtFiLrw@mail.gmail.com/#t
    
    Reported-by: Naresh Kamboju <[email protected]>
    Fixes: e1850ea9bd9e ("bpf: bpf_fib_lookup return MTU value as output when looked up")
    Signed-off-by: Anton Protopopov <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Reviewed-by: Alexander Lobakin <[email protected]>
    Acked-by: Daniel Borkmann <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    aspsk authored and qmonnet committed Apr 3, 2024
    Configuration menu
    Copy the full SHA
    7fe20f4 View commit details
    Browse the repository at this point in the history

Commits on Apr 4, 2024

  1. bpftool: Mount bpffs on provided dir instead of parent dir

    When pinning programs/objects under PATH (eg: during "bpftool prog
    loadall") the bpffs is mounted on the parent dir of PATH in the
    following situations:
    - the given dir exists but it is not bpffs.
    - the given dir doesn't exist and the parent dir is not bpffs.
    
    Mounting on the parent dir can also have the unintentional side-
    effect of hiding other files located under the parent dir.
    
    If the given dir exists but is not bpffs, then the bpffs should
    be mounted on the given dir and not its parent dir.
    
    Similarly, if the given dir doesn't exist and its parent dir is not
    bpffs, then the given dir should be created and the bpffs should be
    mounted on this new dir.
    
    Fixes: 2a36c26fe3b8 ("bpftool: Support bpffs mountpoint as pin path for prog loadall")
    Signed-off-by: Sahil Siddiq <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]/T/#t
    Link: https://lore.kernel.org/bpf/[email protected]
    
    Closes: libbpf#100
    
    Changes since v1:
     - Split "mount_bpffs_for_pin" into two functions.
       This is done to improve maintainability and readability.
    
    Changes since v2:
    - mount_bpffs_for_pin: rename to "create_and_mount_bpffs_dir".
    - mount_bpffs_given_file: rename to "mount_bpffs_given_file".
    - create_and_mount_bpffs_dir:
      - introduce "dir_exists" boolean.
      - remove new dir if "mnt_fs" fails.
    - improve error handling and error messages.
    
    Changes since v3:
    - Rectify function name.
    - Improve error messages and formatting.
    - mount_bpffs_for_file:
      - Check if dir exists before block_mount check.
    
    Changes since v4:
    - Use strdup instead of strcpy.
    - create_and_mount_bpffs_dir:
      - Use S_IRWXU instead of 0700.
    - Improve error handling and formatting.
    valdaarhun authored and qmonnet committed Apr 4, 2024
    Configuration menu
    Copy the full SHA
    4cf2340 View commit details
    Browse the repository at this point in the history

Commits on Apr 10, 2024

  1. bpf: Add bpf_link support for sk_msg and sk_skb progs

    Add bpf_link support for sk_msg and sk_skb programs. We have an
    internal request to support bpf_link for sk_msg programs so user
    space can have a uniform handling with bpf_link based libbpf
    APIs. Using bpf_link based libbpf API also has a benefit which
    makes system robust by decoupling prog life cycle and
    attachment life cycle.
    
    Reviewed-by: John Fastabend <[email protected]>
    Signed-off-by: Yonghong Song <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Yonghong Song authored and qmonnet committed Apr 10, 2024
    Configuration menu
    Copy the full SHA
    2d91445 View commit details
    Browse the repository at this point in the history
  2. bpftool: Add link dump support for BPF_LINK_TYPE_SOCKMAP

    An example output looks like:
      $ bpftool link
        1776: sk_skb  prog 49730
                map_id 0  attach_type sk_skb_verdict
                pids test_progs(8424)
        1777: sk_skb  prog 49755
                map_id 0  attach_type sk_skb_stream_verdict
                pids test_progs(8424)
        1778: sk_msg  prog 49770
                map_id 8208  attach_type sk_msg_verdict
                pids test_progs(8424)
    
    Reviewed-by: John Fastabend <[email protected]>
    Reviewed-by: Quentin Monnet <[email protected]>
    Signed-off-by: Yonghong Song <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Yonghong Song authored and qmonnet committed Apr 10, 2024
    Configuration menu
    Copy the full SHA
    3f6a2a3 View commit details
    Browse the repository at this point in the history

Commits on Apr 11, 2024

  1. bpftool: Fix typo in error message

    s/at at/at a/
    
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: Quentin Monnet <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    toblux authored and qmonnet committed Apr 11, 2024
    Configuration menu
    Copy the full SHA
    9be1619 View commit details
    Browse the repository at this point in the history

Commits on Apr 13, 2024

  1. bpftool: Update documentation where progs/maps can be passed by name

    When using references to BPF programs, bpftool supports passing programs
    by name on the command line. The manual pages for "bpftool prog" and
    "bpftool map" (for prog_array updates) mention it, but we have a few
    additional subcommands that support referencing programs by name but do
    not mention it in their documentation. Let's update the pages for
    subcommands "btf", "cgroup", and "net".
    
    Similarly, we can reference maps by name when passing them to "bpftool
    prog load", so we update the page for "bpftool prog" as well.
    
    Signed-off-by: Quentin Monnet <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    qmonnet committed Apr 13, 2024
    Configuration menu
    Copy the full SHA
    5ac002c View commit details
    Browse the repository at this point in the history
  2. bpftool: Address minor issues in bash completion

    This commit contains a series of clean-ups and fixes for bpftool's bash
    completion file:
    
    - Make sure all local variables are declared as such.
    - Make sure variables are initialised before being read.
    - Update ELF section ("maps" -> ".maps") for looking up map names in
      object files.
    - Fix call to _init_completion.
    - Move definition for MAP_TYPE and PROG_TYPE higher up in the scope to
      avoid defining them multiple times, reuse MAP_TYPE where relevant.
    - Simplify completion for "duration" keyword in "bpftool prog profile".
    - Fix completion for "bpftool struct_ops register" and "bpftool link
      (pin|detach)" where we would repeatedly suggest file names instead of
      suggesting just one name.
    - Fix completion for "bpftool iter pin ... map MAP" to account for the
      "map" keyword.
    - Add missing "detach" suggestion for "bpftool link".
    
    Signed-off-by: Quentin Monnet <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    qmonnet committed Apr 13, 2024
    Configuration menu
    Copy the full SHA
    26f9e61 View commit details
    Browse the repository at this point in the history

Commits on Apr 20, 2024

  1. tools: sync include/uapi/linux/bpf.h

    cp include/uapi/linux/bpf.h tools/include/uapi/linux/bpf.h
    
    Signed-off-by: Benjamin Tissoires <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Benjamin Tissoires authored and qmonnet committed Apr 20, 2024
    Configuration menu
    Copy the full SHA
    dabfa38 View commit details
    Browse the repository at this point in the history

Commits on Apr 25, 2024

  1. sync: Update libbpf submodule

    Pull latest libbpf from mirror.
    Libbpf version: 1.5.0
    Libbpf commit:  2fdcc365a0c5253314644b8e27b02cf4affecbed
    
    Signed-off-by: Quentin Monnet <[email protected]>
    qmonnet committed Apr 25, 2024
    Configuration menu
    Copy the full SHA
    f604cb2 View commit details
    Browse the repository at this point in the history
  2. sync: Pull latest bpftool changes from kernel

    Syncing latest bpftool commits from kernel repository.
    Baseline bpf-next commit:   2a24e2485722b0e12e17a2bd473bd15c9e420bdb
    Checkpoint bpf-next commit: 82e38a505c9868e784ec31e743fd8a9fa5ca1084
    Baseline bpf commit:        443574b033876c85a35de4c65c14f7fe092222b2
    Checkpoint bpf commit:      5bcf0dcbf9066348058b88a510c57f70f384c92c
    
    Andrii Nakryiko (1):
      bpf: add special internal-only MOV instruction to resolve per-CPU
        addrs
    
    Anton Protopopov (1):
      bpf: Pack struct bpf_fib_lookup
    
    Benjamin Tissoires (1):
      tools: sync include/uapi/linux/bpf.h
    
    Quentin Monnet (2):
      bpftool: Update documentation where progs/maps can be passed by name
      bpftool: Address minor issues in bash completion
    
    Sahil Siddiq (1):
      bpftool: Mount bpffs on provided dir instead of parent dir
    
    Thorsten Blum (1):
      bpftool: Fix typo in error message
    
    Yonghong Song (2):
      bpf: Add bpf_link support for sk_msg and sk_skb progs
      bpftool: Add link dump support for BPF_LINK_TYPE_SOCKMAP
    
     bash-completion/bpftool  | 61 +++++++++++--------------
     docs/bpftool-btf.rst     |  2 +-
     docs/bpftool-cgroup.rst  |  2 +-
     docs/bpftool-net.rst     |  2 +-
     docs/bpftool-prog.rst    |  2 +-
     include/uapi/linux/bpf.h | 11 ++++-
     src/common.c             | 96 +++++++++++++++++++++++++++++++++++-----
     src/iter.c               |  2 +-
     src/kernel/bpf/disasm.c  | 14 ++++++
     src/link.c               |  9 ++++
     src/main.h               |  3 +-
     src/prog.c               |  7 ++-
     src/struct_ops.c         |  2 +-
     13 files changed, 155 insertions(+), 58 deletions(-)
    
    Signed-off-by: Quentin Monnet <[email protected]>
    qmonnet committed Apr 25, 2024
    Configuration menu
    Copy the full SHA
    d54e1fa View commit details
    Browse the repository at this point in the history
  3. mirror: Update expected diff with kernel sources

    A recent patch has touched some portions of bpftool's Makefile that
    differ between kernel's and mirror's sources. Let's update the diff with
    the expected differences accordingly, to smoothen future sync ups.
    
    Signed-off-by: Quentin Monnet <[email protected]>
    qmonnet committed Apr 25, 2024
    Configuration menu
    Copy the full SHA
    067246f View commit details
    Browse the repository at this point in the history