Skip to content
  1. Oct 19, 2022
  2. Oct 14, 2022
  3. Oct 13, 2022
  4. Oct 12, 2022
  5. Oct 11, 2022
  6. Oct 07, 2022
  7. Oct 06, 2022
    • Yonghong Song's avatar
      selftests/bpf: Add selftest deny_namespace to s390x deny list · 8206e4e9
      Yonghong Song authored
      
      
      BPF CI reported that selftest deny_namespace failed with s390x.
      
        test_unpriv_userns_create_no_bpf:PASS:no-bpf unpriv new user ns 0 nsec
        test_deny_namespace:PASS:skel load 0 nsec
        libbpf: prog 'test_userns_create': failed to attach: ERROR: strerror_r(-524)=22
        libbpf: prog 'test_userns_create': failed to auto-attach: -524
        test_deny_namespace:FAIL:attach unexpected error: -524 (errno 524)
        #57/1    deny_namespace/unpriv_userns_create_no_bpf:FAIL
        #57      deny_namespace:FAIL
      
      BPF program test_userns_create is a BPF LSM type program which is
      based on trampoline and s390x does not support s390x. Let add the
      test to x390x deny list to avoid this failure in BPF CI.
      
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Link: https://lore.kernel.org/r/20221006053429.3549165-1-yhs@fb.com
      
      
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      8206e4e9
    • Andrii Nakryiko's avatar
      scripts/bpf_doc.py: update logic to not assume sequential enum values · ce3e44a0
      Andrii Nakryiko authored
      
      
      Relax bpf_doc.py's expectation of all BPF_FUNC_xxx enumerators having
      sequential values increasing by one. Instead, only make sure that
      relative order of BPF helper descriptions in comments matches
      enumerators definitions order.
      
      Also additionally make sure that helper IDs are not duplicated.
      
      And also make sure that for cases when we have multiple descriptions for
      the same BPF helper (e.g., for bpf_get_socket_cookie()), all such
      descriptions are grouped together.
      
      Such checks should capture all the same (and more) issues in upstream
      UAPI headers, but also handle backported kernels correctly.
      
      Reported-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Reviewed-by: default avatarQuentin Monnet <quentin@isovalent.com>
      Link: https://lore.kernel.org/r/20221006042452.2089843-2-andrii@kernel.org
      
      
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      ce3e44a0
    • Andrii Nakryiko's avatar
      bpf: explicitly define BPF_FUNC_xxx integer values · 8a76145a
      Andrii Nakryiko authored
      
      
      Historically enum bpf_func_id's BPF_FUNC_xxx enumerators relied on
      implicit sequential values being assigned by compiler. This is
      convenient, as new BPF helpers are always added at the very end, but it
      also has its downsides, some of them being:
      
        - with over 200 helpers now it's very hard to know what's each helper's ID,
          which is often important to know when working with BPF assembly (e.g.,
          by dumping raw bpf assembly instructions with llvm-objdump -d
          command). it's possible to work around this by looking into vmlinux.h,
          dumping /sys/btf/kernel/vmlinux, looking at libbpf-provided
          bpf_helper_defs.h, etc. But it always feels like an unnecessary step
          and one should be able to quickly figure this out from UAPI header.
      
        - when backporting and cherry-picking only some BPF helpers onto older
          kernels it's important to be able to skip some enum values for helpers
          that weren't backported, but preserve absolute integer IDs to keep BPF
          helper IDs stable so that BPF programs stay portable across upstream
          and backported kernels.
      
      While neither problem is insurmountable, they come up frequently enough
      and are annoying enough to warrant improving the situation. And for the
      backporting the problem can easily go unnoticed for a while, especially
      if backport is done with people not very familiar with BPF subsystem overall.
      
      Anyways, it's easy to fix this by making sure that __BPF_FUNC_MAPPER
      macro provides explicit helper IDs. Unfortunately that would potentially
      break existing users that use UAPI-exposed __BPF_FUNC_MAPPER and are
      expected to pass macro that accepts only symbolic helper identifier
      (e.g., map_lookup_elem for bpf_map_lookup_elem() helper).
      
      As such, we need to introduce a new macro (___BPF_FUNC_MAPPER) which
      would specify both identifier and integer ID, but in such a way as to
      allow existing __BPF_FUNC_MAPPER be expressed in terms of new
      ___BPF_FUNC_MAPPER macro. And that's what this patch is doing. To avoid
      duplication and allow __BPF_FUNC_MAPPER stay *exactly* the same,
      ___BPF_FUNC_MAPPER accepts arbitrary "context" arguments, which can be
      used to pass any extra macros, arguments, and whatnot. In our case we
      use this to pass original user-provided macro that expects single
      argument and __BPF_FUNC_MAPPER is using it's own three-argument
      __BPF_FUNC_MAPPER_APPLY intermediate macro to impedance-match new and
      old "callback" macros.
      
      Once we resolve this, we use new ___BPF_FUNC_MAPPER to define enum
      bpf_func_id with explicit values. The other users of __BPF_FUNC_MAPPER
      in kernel (namely in kernel/bpf/disasm.c) are kept exactly the same both
      as demonstration that backwards compat works, but also to avoid
      unnecessary code churn.
      
      Note that new ___BPF_FUNC_MAPPER() doesn't forcefully insert comma
      between values, as that might not be appropriate in all possible cases
      where ___BPF_FUNC_MAPPER might be used by users. This doesn't reduce
      usability, as it's trivial to insert that comma inside "callback" macro.
      
      To validate all the manually specified IDs are exactly right, we used
      BTF to compare before and after values:
      
        $ bpftool btf dump file ~/linux-build/default/vmlinux | rg bpf_func_id -A 211 > after.txt
        $ git stash # stach UAPI changes
        $ make -j90
        ... re-building kernel without UAPI changes ...
        $ bpftool btf dump file ~/linux-build/default/vmlinux | rg bpf_func_id -A 211 > before.txt
        $ diff -u before.txt after.txt
        --- before.txt  2022-10-05 10:48:18.119195916 -0700
        +++ after.txt   2022-10-05 10:46:49.446615025 -0700
        @@ -1,4 +1,4 @@
        -[14576] ENUM 'bpf_func_id' encoding=UNSIGNED size=4 vlen=211
        +[9560] ENUM 'bpf_func_id' encoding=UNSIGNED size=4 vlen=211
                'BPF_FUNC_unspec' val=0
                'BPF_FUNC_map_lookup_elem' val=1
                'BPF_FUNC_map_update_elem' val=2
      
      As can be seen from diff above, the only thing that changed was resulting BTF
      type ID of ENUM bpf_func_id, not any of the enumerators, their names or integer
      values.
      
      The only other place that needed fixing was scripts/bpf_doc.py used to generate
      man pages and bpf_helper_defs.h header for libbpf and selftests. That script is
      tightly-coupled to exact shape of ___BPF_FUNC_MAPPER macro definition, so had
      to be trivially adapted.
      
      Cc: Quentin Monnet <quentin@isovalent.com>
      Reported-by: default avatarAndrea Terzolo <andrea.terzolo@polito.it>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Reviewed-by: default avatarQuentin Monnet <quentin@isovalent.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Acked-by: default avatarToke Høiland-Jørgensen <toke@redhat.com>
      Link: https://lore.kernel.org/r/20221006042452.2089843-1-andrii@kernel.org
      
      
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      8a76145a
    • Andrii Nakryiko's avatar
      selftests/bpf: add BPF object fixup step to veristat · 60df8c4d
      Andrii Nakryiko authored
      
      
      Add a step to attempt to "fix up" BPF object file to make it possible to
      successfully load it. E.g., set non-zero size for BPF maps that expect
      max_entries set, but BPF object file itself doesn't have declarative
      max_entries values specified.
      
      Another issue was with automatic map pinning. Pinning has no effect on
      BPF verification process itself but can interfere when validating
      multiple related programs and object files, so veristat disabled all the
      pinning explicitly.
      
      In the future more such fix up heuristics could be added to accommodate
      common patterns encountered in practice.
      
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/r/20221005161450.1064469-3-andrii@kernel.org
      
      
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      60df8c4d
    • Andrii Nakryiko's avatar
      selftests/bpf: avoid reporting +100% difference in veristat for actual 0% · 6df2eb45
      Andrii Nakryiko authored
      
      
      In special case when both base and comparison values are 0, veristat
      currently reports "+0 (+100%)" difference, which is quite confusing. Fix
      it up to be "+0 (+0%)".
      
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/r/20221005161450.1064469-2-andrii@kernel.org
      
      
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      6df2eb45
    • Andrii Nakryiko's avatar
      selftests/bpf: allow requesting log level 2 in test_verifier · 2a72f595
      Andrii Nakryiko authored
      
      
      Log level 1 on successfully verified programs are basically equivalent
      to log level 4 (stats-only), so it's useful to be able to request more
      verbose logs at log level 2. Teach test_verifier to recognize -vv as
      "very verbose" mode switch and use log level 2 in such mode.
      
      Also force verifier stats regradless of -v or -vv, they are very minimal
      and useful to be always emitted in verbose mode.
      
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/r/20221005161450.1064469-1-andrii@kernel.org
      
      
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      2a72f595
    • Eduard Zingerman's avatar
      selftests/bpf: Test btf dump for struct with padding only fields · d503f117
      Eduard Zingerman authored
      
      
      Structures with zero regular fields but some padding constitute a
      special case in btf_dump.c:btf_dump_emit_struct_def with regards to
      newline before closing '}'.
      
      Signed-off-by: default avatarEduard Zingerman <eddyz87@gmail.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20221001104425.415768-2-eddyz87@gmail.com
      d503f117
    • Eduard Zingerman's avatar
      bpftool: Print newline before '}' for struct with padding only fields · 44a726c3
      Eduard Zingerman authored
      
      
      btf_dump_emit_struct_def attempts to print empty structures at a
      single line, e.g. `struct empty {}`. However, it has to account for a
      case when there are no regular but some padding fields in the struct.
      In such case `vlen` would be zero, but size would be non-zero.
      
      E.g. here is struct bpf_timer from vmlinux.h before this patch:
      
       struct bpf_timer {
       	long: 64;
      	long: 64;};
      
      And after this patch:
      
       struct bpf_dynptr {
       	long: 64;
      	long: 64;
       };
      
      Signed-off-by: default avatarEduard Zingerman <eddyz87@gmail.com>
      Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Link: https://lore.kernel.org/bpf/20221001104425.415768-1-eddyz87@gmail.com
      44a726c3
  8. Oct 05, 2022
    • Linus Torvalds's avatar
      Merge tag 'net-next-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next · 0326074f
      Linus Torvalds authored
      Pull networking updates from Jakub Kicinski:
       "Core:
      
         - Introduce and use a single page frag cache for allocating small skb
           heads, clawing back the 10-20% performance regression in UDP flood
           test from previous fixes.
      
         - Run packets which already went thru HW coalescing thru SW GRO. This
           significantly improves TCP segment coalescing and simplifies
           deployments as different workloads benefit from HW or SW GRO.
      
         - Shrink the size of the base zero-copy send structure.
      
         - Move TCP init under a new slow / sleepable version of DO_ONCE().
      
        BPF:
      
         - Add BPF-specific, any-context-safe memory allocator.
      
         - Add helpers/kfuncs for PKCS#7 signature verification from BPF
           programs.
      
         - Define a new map type and related helpers for user space -> kernel
           communication over a ring buffer (BPF_MAP_TYPE_USER_RINGBUF).
      
         - Allow targeting BPF iterators to loop through resources of one
           task/thread.
      
         - Add ability to call selected destructive functions. Expose
           crash_kexec() to allow BPF to trigger a kernel dump. Use
           CAP_SYS_BOOT check on the loading process to judge permissions.
      
         - Enable BPF to collect custom hierarchical cgroup stats efficiently
           by integrating with the rstat framework.
      
         - Support struct arguments for trampoline based programs. Only
           structs with size <= 16B and x86 are supported.
      
         - Invoke cgroup/connect{4,6} programs for unprivileged ICMP ping
           sockets (instead of just TCP and UDP sockets).
      
         - Add a helper for accessing CLOCK_TAI for time sensitive network
           related programs.
      
         - Support accessing network tunnel metadata's flags.
      
         - Make TCP SYN ACK RTO tunable by BPF programs with TCP Fast Open.
      
         - Add support for writing to Netfilter's nf_conn:mark.
      
        Protocols:
      
         - WiFi: more Extremely High Throughput (EHT) and Multi-Link Operation
           (MLO) work (802.11be, WiFi 7).
      
         - vsock: improve support for SO_RCVLOWAT.
      
         - SMC: support SO_REUSEPORT.
      
         - Netlink: define and document how to use netlink in a "modern" way.
           Support reporting missing attributes via extended ACK.
      
         - IPSec: support collect metadata mode for xfrm interfaces.
      
         - TCPv6: send consistent autoflowlabel in SYN_RECV state and RST
           packets.
      
         - TCP: introduce optional per-netns connection hash table to allow
           better isolation between namespaces (opt-in, at the cost of memory
           and cache pressure).
      
         - MPTCP: support TCP_FASTOPEN_CONNECT.
      
         - Add NEXT-C-SID support in Segment Routing (SRv6) End behavior.
      
         - Adjust IP_UNICAST_IF sockopt behavior for connected UDP sockets.
      
         - Open vSwitch:
            - Allow specifying ifindex of new interfaces.
            - Allow conntrack and metering in non-initial user namespace.
      
         - TLS: support the Korean ARIA-GCM crypto algorithm.
      
         - Remove DECnet support.
      
        Driver API:
      
         - Allow selecting the conduit interface used by each port in DSA
           switches, at runtime.
      
         - Ethernet Power Sourcing Equipment and Power Device support.
      
         - Add tc-taprio support for queueMaxSDU parameter, i.e. setting per
           traffic class max frame size for time-based packet schedules.
      
         - Support PHY rate matching - adapting between differing host-side
           and link-side speeds.
      
         - Introduce QUSGMII PHY mode and 1000BASE-KX interface mode.
      
         - Validate OF (device tree) nodes for DSA shared ports; make
           phylink-related properties mandatory on DSA and CPU ports.
           Enforcing more uniformity should allow transitioning to phylink.
      
         - Require that flash component name used during update matches one of
           the components for which version is reported by info_get().
      
         - Remove "weight" argument from driver-facing NAPI API as much as
           possible. It's one of those magic knobs which seemed like a good
           idea at the time but is too indirect to use in practice.
      
         - Support offload of TLS connections with 256 bit keys.
      
        New hardware / drivers:
      
         - Ethernet:
            - Microchip KSZ9896 6-port Gigabit Ethernet Switch
            - Renesas Ethernet AVB (EtherAVB-IF) Gen4 SoCs
            - Analog Devices ADIN1110 and ADIN2111 industrial single pair
              Ethernet (10BASE-T1L) MAC+PHY.
            - Rockchip RV1126 Gigabit Ethernet (a version of stmmac IP).
      
         - Ethernet SFPs / modules:
            - RollBall / Hilink / Turris 10G copper SFPs
            - HALNy GPON module
      
         - WiFi:
            - CYW43439 SDIO chipset (brcmfmac)
            - CYW89459 PCIe chipset (brcmfmac)
            - BCM4378 on Apple platforms (brcmfmac)
      
        Drivers:
      
         - CAN:
            - gs_usb: HW timestamp support
      
         - Ethernet PHYs:
            - lan8814: cable diagnostics
      
         - Ethernet NICs:
            - Intel (100G):
               - implement control of FCS/CRC stripping
               - port splitting via devlink
               - L2TPv3 filtering offload
            - nVidia/Mellanox:
               - tunnel offload for sub-functions
               - MACSec offload, w/ Extended packet number and replay window
                 offload
               - significantly restructure, and optimize the AF_XDP support,
                 align the behavior with other vendors
            - Huawei:
               - configuring DSCP map for traffic class selection
               - querying standard FEC statistics
               - querying SerDes lane number via ethtool
            - Marvell/Cavium:
               - egress priority flow control
               - MACSec offload
            - AMD/SolarFlare:
               - PTP over IPv6 and raw Ethernet
            - small / embedded:
               - ax88772: convert to phylink (to support SFP cages)
               - altera: tse: convert to phylink
               - ftgmac100: support fixed link
               - enetc: standard Ethtool counters
               - macb: ZynqMP SGMII dynamic configuration support
               - tsnep: support multi-queue and use page pool
               - lan743x: Rx IP & TCP checksum offload
               - igc: add xdp frags support to ndo_xdp_xmit
      
         - Ethernet high-speed switches:
            - Marvell (prestera):
               - support SPAN port features (traffic mirroring)
               - nexthop object offloading
            - Microchip (sparx5):
               - multicast forwarding offload
               - QoS queuing offload (tc-mqprio, tc-tbf, tc-ets)
      
         - Ethernet embedded switches:
            - Marvell (mv88e6xxx):
               - support RGMII cmode
            - NXP (felix):
               - standardized ethtool counters
            - Microchip (lan966x):
               - QoS queuing offload (tc-mqprio, tc-tbf, tc-cbs, tc-ets)
               - traffic policing and mirroring
               - link aggregation / bonding offload
               - QUSGMII PHY mode support
      
         - Qualcomm 802.11ax WiFi (ath11k):
            - cold boot calibration support on WCN6750
            - support to connect to a non-transmit MBSSID AP profile
            - enable remain-on-channel support on WCN6750
            - Wake-on-WLAN support for WCN6750
            - support to provide transmit power from firmware via nl80211
            - support to get power save duration for each client
            - spectral scan support for 160 MHz
      
         - MediaTek WiFi (mt76):
            - WiFi-to-Ethernet bridging offload for MT7986 chips
      
         - RealTek WiFi (rtw89):
            - P2P support"
      
      * tag 'net-next-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next: (1864 commits)
        eth: pse: add missing static inlines
        once: rename _SLOW to _SLEEPABLE
        net: pse-pd: add regulator based PSE driver
        dt-bindings: net: pse-dt: add bindings for regulator based PoDL PSE controller
        ethtool: add interface to interact with Ethernet Power Equipment
        net: mdiobus: search for PSE nodes by parsing PHY nodes.
        net: mdiobus: fwnode_mdiobus_register_phy() rework error handling
        net: add framework to support Ethernet PSE and PDs devices
        dt-bindings: net: phy: add PoDL PSE property
        net: marvell: prestera: Propagate nh state from hw to kernel
        net: marvell: prestera: Add neighbour cache accounting
        net: marvell: prestera: add stub handler neighbour events
        net: marvell: prestera: Add heplers to interact with fib_notifier_info
        net: marvell: prestera: Add length macros for prestera_ip_addr
        net: marvell: prestera: add delayed wq and flush wq on deinit
        net: marvell: prestera: Add strict cleanup of fib arbiter
        net: marvell: prestera: Add cleanup of allocated fib_nodes
        net: marvell: prestera: Add router nexthops ABI
        eth: octeon: fix build after netif_napi_add() changes
        net/mlx5: E-Switch, Return EBUSY if can't get mode lock
        ...
      0326074f
    • Linus Torvalds's avatar
      Merge tag 'landlock-6.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mic/linux · 522667b2
      Linus Torvalds authored
      Pull landlock updates from Mickaël Salaün:
       "Improve user help for Landlock (documentation and sample)"
      
      * tag 'landlock-6.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mic/linux:
        landlock: Fix documentation style
        landlock: Slightly improve documentation and fix spelling
        samples/landlock: Print hints about ABI versions
      522667b2
    • Linus Torvalds's avatar
      Merge tag 'audit-pr-20221003' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit · c645c11a
      Linus Torvalds authored
      Pull audit updates from Paul Moore:
       "Six audit patches for v6.1, most are pretty trivial, but a quick list
        of the highlights are below:
      
         - Only free the audit proctitle information on task exit. This allows
           us to cache the information and improve performance slightly.
      
         - Use the time_after() macro to do time comparisons instead of doing
           it directly and potentially causing ourselves problems when the
           timer wraps.
      
         - Convert an audit_context state comparison from a relative enum
           comparison, e.g. (x < y), to a not-equal comparison to ensure that
           we are not caught out at some unknown point in the future by an
           enum shuffle.
      
         - A handful of small cleanups such as tidying up comments and
           removing unused declarations"
      
      * tag 'audit-pr-20221003' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit:
        audit: remove selinux_audit_rule_update() declaration
        audit: use time_after to compare time
        audit: free audit_proctitle only on task exit
        audit: explicitly check audit_context->context enum value
        audit: audit_context pid unused, context enum comment fix
        audit: fix repeated words in comments
      c645c11a