Networking changes for 6.7.
Core & protocols
----------------
- Support usec resolution of TCP timestamps, enabled selectively by
a route attribute.
- Defer regular TCP ACK while processing socket backlog, try to send
a cumulative ACK at the end. Increase single TCP flow performance
on a 200Gbit NIC by 20% (100Gbit -> 120Gbit).
- The Fair Queuing (FQ) packet scheduler:
- add built-in 3 band prio / WRR scheduling
- support bypass if the qdisc is mostly idle (5% speed up for TCP RR)
- improve inactive flow reporting
- optimize the layout of structures for better cache locality
- Support TCP Authentication Option (RFC 5925, TCP-AO), a more modern
replacement for the old MD5 option.
- Add more retransmission timeout (RTO) related statistics to TCP_INFO.
- Support sending fragmented skbs over vsock sockets.
- Make sure we send SIGPIPE for vsock sockets if socket was shutdown().
- Add sysctl for ignoring lower limit on lifetime in Router
Advertisement PIO, based on an in-progress IETF draft.
- Add sysctl to control activation of TCP ping-pong mode.
- Add sysctl to make connection timeout in MPTCP configurable.
- Support rcvlowat and notsent_lowat on MPTCP sockets, to help apps
limit the number of wakeups.
- Support netlink GET for MDB (multicast forwarding), allowing user
space to request a single MDB entry instead of dumping the entire
table.
- Support selective FDB flushing in the VXLAN tunnel driver.
- Allow limiting learned FDB entries in bridges, prevent OOM attacks.
- Allow controlling via configfs netconsole targets which were created
via the kernel cmdline at boot, rather than via configfs at runtime.
- Support multiple PTP timestamp event queue readers with different
filters.
- MCTP over I3C.
BPF
---
- Add new veth-like netdevice where BPF program defines the logic
of the xmit routine. It can operate in L3 and L2 mode.
- Support exceptions - allow asserting conditions which should
never be true but are hard for the verifier to infer.
With some extra flexibility around handling of the exit / failure.
https://lwn.net/Articles/938435/
- Add support for local per-cpu kptr, allow allocating and storing
per-cpu objects in maps. Access to those objects operates on
the value for the current CPU. This allows to deprecate local
one-off implementations of per-CPU storage like
BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE maps.
- Extend cgroup BPF sockaddr hooks for UNIX sockets. The use case is
for systemd to re-implement the LogNamespace feature which allows
running multiple instances of systemd-journald to process the logs
of different services.
- Enable open-coded task_vma iteration, after maple tree conversion
made it hard to directly walk VMAs in tracing programs.
- Add open-coded task, css_task and css iterator support.
One of the use cases is customizable OOM victim selection via BPF.
- Allow source address selection with bpf_*_fib_lookup().
- Add ability to pin BPF timer to the current CPU.
- Prevent creation of infinite loops by combining tail calls and
fentry/fexit programs.
- Add missed stats for kprobes to retrieve the number of missed kprobe
executions and subsequent executions of BPF programs.
- Inherit system settings for CPU security mitigations.
- Add BPF v4 CPU instruction support for arm32 and s390x.
Changes to common code
----------------------
- overflow: add DEFINE_FLEX() for on-stack definition of structs
with flexible array members.
- Process doc update with more guidance for reviewers.
Driver API
----------
- Simplify locking in WiFi (cfg80211 and mac80211 layers), use wiphy
mutex in most places and remove a lot of smaller locks.
- Create a common DPLL configuration API. Allow configuring
and querying state of PLL circuits used for clock syntonization,
in network time distribution.
- Unify fragmented and full page allocation APIs in page pool code.
Let drivers be ignorant of PAGE_SIZE.
- Rework PHY state machine to avoid races with calls to phy_stop().
- Notify DSA drivers of MAC address changes on user ports, improve
correctness of offloads which depend on matching port MAC addresses.
- Allow antenna control on injected WiFi frames.
- Reduce the number of variants of napi_schedule().
- Simplify error handling when composing devlink health messages.
Misc
----
- A lot of KCSAN data race "fixes", from Eric.
- A lot of __counted_by() annotations, from Kees.
- A lot of strncpy -> strscpy and printf format fixes.
- Replace master/slave terminology with conduit/user in DSA drivers.
- Handful of KUnit tests for netdev and WiFi core.
Removed
-------
- AppleTalk COPS.
- AppleTalk ipddp.
- TI AR7 CPMAC Ethernet driver.
Drivers
-------
- Ethernet high-speed NICs:
- Intel (100G, ice, idpf):
- add a driver for the Intel E2000 IPUs
- make CRC/FCS stripping configurable
- cross-timestamping for E823 devices
- basic support for E830 devices
- use aux-bus for managing client drivers
- i40e: report firmware versions via devlink
- nVidia/Mellanox:
- support 4-port NICs
- increase max number of channels to 256
- optimize / parallelize SF creation flow
- Broadcom (bnxt):
- enhance NIC temperature reporting
- support PAM4 speeds and lane configuration
- Marvell OcteonTX2:
- PTP pulse-per-second output support
- enable hardware timestamping for VFs
- Solarflare/AMD:
- conntrack NAT offload and offload for tunnels
- Wangxun (ngbe/txgbe):
- expose HW statistics
- Pensando/AMD:
- support PCI level reset
- narrow down the condition under which skbs are linearized
- Netronome/Corigine (nfp):
- support CHACHA20-POLY1305 crypto in IPsec offload
- Ethernet NICs embedded, slower, virtual:
- Synopsys (stmmac):
- add Loongson-1 SoC support
- enable use of HW queues with no offload capabilities
- enable PPS input support on all 5 channels
- increase TX coalesce timer to 5ms
- RealTek USB (r8152): improve efficiency of Rx by using GRO frags
- xen: support SW packet timestamping
- add drivers for implementations based on TI's PRUSS (AM64x EVM)
- nVidia/Mellanox Ethernet datacenter switches:
- avoid poor HW resource use on Spectrum-4 by better block selection
for IPv6 multicast forwarding and ordering of blocks in ACL region
- Ethernet embedded switches:
- Microchip:
- support configuring the drive strength for EMI compliance
- ksz9477: partial ACL support
- ksz9477: HSR offload
- ksz9477: Wake on LAN
- Realtek:
- rtl8366rb: respect device tree config of the CPU port
- Ethernet PHYs:
- support Broadcom BCM5221 PHYs
- TI dp83867: support hardware LED blinking
- CAN:
- add support for Linux-PHY based CAN transceivers
- at91_can: clean up and use rx-offload helpers
- WiFi:
- MediaTek (mt76):
- new sub-driver for mt7925 USB/PCIe devices
- HW wireless <> Ethernet bridging in MT7988 chips
- mt7603/mt7628 stability improvements
- Qualcomm (ath12k):
- WCN7850:
- enable 320 MHz channels in 6 GHz band
- hardware rfkill support
- enable IEEE80211_HW_SINGLE_SCAN_ON_ALL_BANDS
to make scan faster
- read board data variant name from SMBIOS
- QCN9274: mesh support
- RealTek (rtw89):
- TDMA-based multi-channel concurrency (MCC)
- Silicon Labs (wfx):
- Remain-On-Channel (ROC) support
- Bluetooth:
- ISO: many improvements for broadcast support
- mark BCM4378/BCM4387 as BROKEN_LE_CODED
- add support for QCA2066
- btmtksdio: enable Bluetooth wakeup from suspend
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEE6jPA+I1ugmIBA4hXMUZtbf5SIrsFAmU8XsYACgkQMUZtbf5S
Irv19RAAnud/24OOF5XMEJkIcYlnfqximh4XO6PujRSYkSkOUJdZTF6iJPgf3pSP
YpwoHYbYKHYfeOf8+3bTNESiQNSnoVmvmvwiS6/7lZ3behHUrGLQzW9Htc3EZyWH
2h6QkDZ5OOjfg0bwYSfp3vXkmMH2k8WE9Y0NvCkhcohqZi13Rmp14RnyPmNb2d1V
yZRYDMSM133KqE6gnBr1Ct65IEvnKeGlCUN2mTGqOJgdn6DZMsyxvtt0y4rmN7Ab
41+CgPU5SfxfbYpW+Dl2HJpgfte3WrC57KC6AM0PAPJzPmQWgeB/m9mjz/apj6Bg
bhsEIo7FdvbCnQm3yWPhK2OgCAcSwLr8jfGMU+Q+W4VnL5SRRR3Rm0zjsze+kHNP
OfqJgxzl3DpvoJqVBy1h5FGcZt0XHwhksm4cTxWqIahsF+veY0ECBXbuBBQx9XTF
Y7INfI8ulg7wISJs+CJfIClYkgOibTw2u8taBS5ikbtgxNqp5D4QqODn7UefQap1
PR/IDYODF+zRgmMJLeBqSa6fij6BkfOEDiOWak5kggBoZdtbtmeKI6tzze06CNdW
lWv1WEhRufxnwK+IuWsEkjhiMbs2WGLvkJ5JbgQV9BfqHfIfiqBCrcWtT/WbQnGt
lmU46CXh1t/FZEqbmK9h+8vsIIfrcDl6jb5npEiKPRG00vDKRTM=
=46nS
-----END PGP SIGNATURE-----
Merge tag 'net-next-6.7' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next
Pull networking updates from Jakub Kicinski:
"Core & protocols:
- Support usec resolution of TCP timestamps, enabled selectively by a
route attribute.
- Defer regular TCP ACK while processing socket backlog, try to send
a cumulative ACK at the end. Increase single TCP flow performance
on a 200Gbit NIC by 20% (100Gbit -> 120Gbit).
- The Fair Queuing (FQ) packet scheduler:
- add built-in 3 band prio / WRR scheduling
- support bypass if the qdisc is mostly idle (5% speed up for TCP RR)
- improve inactive flow reporting
- optimize the layout of structures for better cache locality
- Support TCP Authentication Option (RFC 5925, TCP-AO), a more modern
replacement for the old MD5 option.
- Add more retransmission timeout (RTO) related statistics to
TCP_INFO.
- Support sending fragmented skbs over vsock sockets.
- Make sure we send SIGPIPE for vsock sockets if socket was
shutdown().
- Add sysctl for ignoring lower limit on lifetime in Router
Advertisement PIO, based on an in-progress IETF draft.
- Add sysctl to control activation of TCP ping-pong mode.
- Add sysctl to make connection timeout in MPTCP configurable.
- Support rcvlowat and notsent_lowat on MPTCP sockets, to help apps
limit the number of wakeups.
- Support netlink GET for MDB (multicast forwarding), allowing user
space to request a single MDB entry instead of dumping the entire
table.
- Support selective FDB flushing in the VXLAN tunnel driver.
- Allow limiting learned FDB entries in bridges, prevent OOM attacks.
- Allow controlling via configfs netconsole targets which were
created via the kernel cmdline at boot, rather than via configfs at
runtime.
- Support multiple PTP timestamp event queue readers with different
filters.
- MCTP over I3C.
BPF:
- Add new veth-like netdevice where BPF program defines the logic of
the xmit routine. It can operate in L3 and L2 mode.
- Support exceptions - allow asserting conditions which should never
be true but are hard for the verifier to infer. With some extra
flexibility around handling of the exit / failure:
https://lwn.net/Articles/938435/
- Add support for local per-cpu kptr, allow allocating and storing
per-cpu objects in maps. Access to those objects operates on the
value for the current CPU.
This allows to deprecate local one-off implementations of per-CPU
storage like BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE maps.
- Extend cgroup BPF sockaddr hooks for UNIX sockets. The use case is
for systemd to re-implement the LogNamespace feature which allows
running multiple instances of systemd-journald to process the logs
of different services.
- Enable open-coded task_vma iteration, after maple tree conversion
made it hard to directly walk VMAs in tracing programs.
- Add open-coded task, css_task and css iterator support. One of the
use cases is customizable OOM victim selection via BPF.
- Allow source address selection with bpf_*_fib_lookup().
- Add ability to pin BPF timer to the current CPU.
- Prevent creation of infinite loops by combining tail calls and
fentry/fexit programs.
- Add missed stats for kprobes to retrieve the number of missed
kprobe executions and subsequent executions of BPF programs.
- Inherit system settings for CPU security mitigations.
- Add BPF v4 CPU instruction support for arm32 and s390x.
Changes to common code:
- overflow: add DEFINE_FLEX() for on-stack definition of structs with
flexible array members.
- Process doc update with more guidance for reviewers.
Driver API:
- Simplify locking in WiFi (cfg80211 and mac80211 layers), use wiphy
mutex in most places and remove a lot of smaller locks.
- Create a common DPLL configuration API. Allow configuring and
querying state of PLL circuits used for clock syntonization, in
network time distribution.
- Unify fragmented and full page allocation APIs in page pool code.
Let drivers be ignorant of PAGE_SIZE.
- Rework PHY state machine to avoid races with calls to phy_stop().
- Notify DSA drivers of MAC address changes on user ports, improve
correctness of offloads which depend on matching port MAC
addresses.
- Allow antenna control on injected WiFi frames.
- Reduce the number of variants of napi_schedule().
- Simplify error handling when composing devlink health messages.
Misc:
- A lot of KCSAN data race "fixes", from Eric.
- A lot of __counted_by() annotations, from Kees.
- A lot of strncpy -> strscpy and printf format fixes.
- Replace master/slave terminology with conduit/user in DSA drivers.
- Handful of KUnit tests for netdev and WiFi core.
Removed:
- AppleTalk COPS.
- AppleTalk ipddp.
- TI AR7 CPMAC Ethernet driver.
Drivers:
- Ethernet high-speed NICs:
- Intel (100G, ice, idpf):
- add a driver for the Intel E2000 IPUs
- make CRC/FCS stripping configurable
- cross-timestamping for E823 devices
- basic support for E830 devices
- use aux-bus for managing client drivers
- i40e: report firmware versions via devlink
- nVidia/Mellanox:
- support 4-port NICs
- increase max number of channels to 256
- optimize / parallelize SF creation flow
- Broadcom (bnxt):
- enhance NIC temperature reporting
- support PAM4 speeds and lane configuration
- Marvell OcteonTX2:
- PTP pulse-per-second output support
- enable hardware timestamping for VFs
- Solarflare/AMD:
- conntrack NAT offload and offload for tunnels
- Wangxun (ngbe/txgbe):
- expose HW statistics
- Pensando/AMD:
- support PCI level reset
- narrow down the condition under which skbs are linearized
- Netronome/Corigine (nfp):
- support CHACHA20-POLY1305 crypto in IPsec offload
- Ethernet NICs embedded, slower, virtual:
- Synopsys (stmmac):
- add Loongson-1 SoC support
- enable use of HW queues with no offload capabilities
- enable PPS input support on all 5 channels
- increase TX coalesce timer to 5ms
- RealTek USB (r8152): improve efficiency of Rx by using GRO frags
- xen: support SW packet timestamping
- add drivers for implementations based on TI's PRUSS (AM64x EVM)
- nVidia/Mellanox Ethernet datacenter switches:
- avoid poor HW resource use on Spectrum-4 by better block
selection for IPv6 multicast forwarding and ordering of blocks
in ACL region
- Ethernet embedded switches:
- Microchip:
- support configuring the drive strength for EMI compliance
- ksz9477: partial ACL support
- ksz9477: HSR offload
- ksz9477: Wake on LAN
- Realtek:
- rtl8366rb: respect device tree config of the CPU port
- Ethernet PHYs:
- support Broadcom BCM5221 PHYs
- TI dp83867: support hardware LED blinking
- CAN:
- add support for Linux-PHY based CAN transceivers
- at91_can: clean up and use rx-offload helpers
- WiFi:
- MediaTek (mt76):
- new sub-driver for mt7925 USB/PCIe devices
- HW wireless <> Ethernet bridging in MT7988 chips
- mt7603/mt7628 stability improvements
- Qualcomm (ath12k):
- WCN7850:
- enable 320 MHz channels in 6 GHz band
- hardware rfkill support
- enable IEEE80211_HW_SINGLE_SCAN_ON_ALL_BANDS to
make scan faster
- read board data variant name from SMBIOS
- QCN9274: mesh support
- RealTek (rtw89):
- TDMA-based multi-channel concurrency (MCC)
- Silicon Labs (wfx):
- Remain-On-Channel (ROC) support
- Bluetooth:
- ISO: many improvements for broadcast support
- mark BCM4378/BCM4387 as BROKEN_LE_CODED
- add support for QCA2066
- btmtksdio: enable Bluetooth wakeup from suspend"
* tag 'net-next-6.7' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next: (1816 commits)
net: pcs: xpcs: Add 2500BASE-X case in get state for XPCS drivers
net: bpf: Use sockopt_lock_sock() in ip_sock_set_tos()
net: mana: Use xdp_set_features_flag instead of direct assignment
vxlan: Cleanup IFLA_VXLAN_PORT_RANGE entry in vxlan_get_size()
iavf: delete the iavf client interface
iavf: add a common function for undoing the interrupt scheme
iavf: use unregister_netdev
iavf: rely on netdev's own registered state
iavf: fix the waiting time for initial reset
iavf: in iavf_down, don't queue watchdog_task if comms failed
iavf: simplify mutex_trylock+sleep loops
iavf: fix comments about old bit locks
doc/netlink: Update schema to support cmd-cnt-name and cmd-max-name
tools: ynl: introduce option to process unknown attributes or types
ipvlan: properly track tx_errors
netdevsim: Block until all devices are released
nfp: using napi_build_skb() to replace build_skb()
net: dsa: microchip: ksz9477: Fix spelling mistake "Enery" -> "Energy"
net: dsa: microchip: Ensure Stable PME Pin State for Wake-on-LAN
net: dsa: microchip: Refactor switch shutdown routine for WoL preparation
...
This commit is contained in:
commit
89ed67ef12
1865 changed files with 121439 additions and 33186 deletions
22
lib/nlattr.c
22
lib/nlattr.c
|
|
@ -134,6 +134,7 @@ void nla_get_range_unsigned(const struct nla_policy *pt,
|
|||
range->max = U32_MAX;
|
||||
break;
|
||||
case NLA_U64:
|
||||
case NLA_UINT:
|
||||
case NLA_MSECS:
|
||||
range->max = U64_MAX;
|
||||
break;
|
||||
|
|
@ -183,6 +184,9 @@ static int nla_validate_range_unsigned(const struct nla_policy *pt,
|
|||
case NLA_U64:
|
||||
value = nla_get_u64(nla);
|
||||
break;
|
||||
case NLA_UINT:
|
||||
value = nla_get_uint(nla);
|
||||
break;
|
||||
case NLA_MSECS:
|
||||
value = nla_get_u64(nla);
|
||||
break;
|
||||
|
|
@ -248,6 +252,7 @@ void nla_get_range_signed(const struct nla_policy *pt,
|
|||
range->max = S32_MAX;
|
||||
break;
|
||||
case NLA_S64:
|
||||
case NLA_SINT:
|
||||
range->min = S64_MIN;
|
||||
range->max = S64_MAX;
|
||||
break;
|
||||
|
|
@ -295,6 +300,9 @@ static int nla_validate_int_range_signed(const struct nla_policy *pt,
|
|||
case NLA_S64:
|
||||
value = nla_get_s64(nla);
|
||||
break;
|
||||
case NLA_SINT:
|
||||
value = nla_get_sint(nla);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
@ -320,6 +328,7 @@ static int nla_validate_int_range(const struct nla_policy *pt,
|
|||
case NLA_U16:
|
||||
case NLA_U32:
|
||||
case NLA_U64:
|
||||
case NLA_UINT:
|
||||
case NLA_MSECS:
|
||||
case NLA_BINARY:
|
||||
case NLA_BE16:
|
||||
|
|
@ -329,6 +338,7 @@ static int nla_validate_int_range(const struct nla_policy *pt,
|
|||
case NLA_S16:
|
||||
case NLA_S32:
|
||||
case NLA_S64:
|
||||
case NLA_SINT:
|
||||
return nla_validate_int_range_signed(pt, nla, extack);
|
||||
default:
|
||||
WARN_ON(1);
|
||||
|
|
@ -355,6 +365,9 @@ static int nla_validate_mask(const struct nla_policy *pt,
|
|||
case NLA_U64:
|
||||
value = nla_get_u64(nla);
|
||||
break;
|
||||
case NLA_UINT:
|
||||
value = nla_get_uint(nla);
|
||||
break;
|
||||
case NLA_BE16:
|
||||
value = ntohs(nla_get_be16(nla));
|
||||
break;
|
||||
|
|
@ -433,6 +446,15 @@ static int validate_nla(const struct nlattr *nla, int maxtype,
|
|||
goto out_err;
|
||||
break;
|
||||
|
||||
case NLA_SINT:
|
||||
case NLA_UINT:
|
||||
if (attrlen != sizeof(u32) && attrlen != sizeof(u64)) {
|
||||
NL_SET_ERR_MSG_ATTR_POL(extack, nla, pt,
|
||||
"invalid attribute length");
|
||||
return -EINVAL;
|
||||
}
|
||||
break;
|
||||
|
||||
case NLA_BITFIELD32:
|
||||
if (attrlen != sizeof(struct nla_bitfield32))
|
||||
goto out_err;
|
||||
|
|
|
|||
371
lib/test_bpf.c
371
lib/test_bpf.c
|
|
@ -5111,6 +5111,104 @@ static struct bpf_test tests[] = {
|
|||
{ },
|
||||
{ { 0, 0xffffffff } }
|
||||
},
|
||||
/* MOVSX32 */
|
||||
{
|
||||
"ALU_MOVSX | BPF_B",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R2, 0x00000000ffffffefLL),
|
||||
BPF_LD_IMM64(R3, 0xdeadbeefdeadbeefLL),
|
||||
BPF_MOVSX32_REG(R1, R3, 8),
|
||||
BPF_JMP_REG(BPF_JEQ, R2, R1, 2),
|
||||
BPF_MOV32_IMM(R0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_MOV32_IMM(R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
{
|
||||
"ALU_MOVSX | BPF_H",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R2, 0x00000000ffffbeefLL),
|
||||
BPF_LD_IMM64(R3, 0xdeadbeefdeadbeefLL),
|
||||
BPF_MOVSX32_REG(R1, R3, 16),
|
||||
BPF_JMP_REG(BPF_JEQ, R2, R1, 2),
|
||||
BPF_MOV32_IMM(R0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_MOV32_IMM(R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
{
|
||||
"ALU_MOVSX | BPF_W",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R2, 0x00000000deadbeefLL),
|
||||
BPF_LD_IMM64(R3, 0xdeadbeefdeadbeefLL),
|
||||
BPF_MOVSX32_REG(R1, R3, 32),
|
||||
BPF_JMP_REG(BPF_JEQ, R2, R1, 2),
|
||||
BPF_MOV32_IMM(R0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_MOV32_IMM(R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
/* MOVSX64 REG */
|
||||
{
|
||||
"ALU64_MOVSX | BPF_B",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R2, 0xffffffffffffffefLL),
|
||||
BPF_LD_IMM64(R3, 0xdeadbeefdeadbeefLL),
|
||||
BPF_MOVSX64_REG(R1, R3, 8),
|
||||
BPF_JMP_REG(BPF_JEQ, R2, R1, 2),
|
||||
BPF_MOV32_IMM(R0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_MOV32_IMM(R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
{
|
||||
"ALU64_MOVSX | BPF_H",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R2, 0xffffffffffffbeefLL),
|
||||
BPF_LD_IMM64(R3, 0xdeadbeefdeadbeefLL),
|
||||
BPF_MOVSX64_REG(R1, R3, 16),
|
||||
BPF_JMP_REG(BPF_JEQ, R2, R1, 2),
|
||||
BPF_MOV32_IMM(R0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_MOV32_IMM(R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
{
|
||||
"ALU64_MOVSX | BPF_W",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R2, 0xffffffffdeadbeefLL),
|
||||
BPF_LD_IMM64(R3, 0xdeadbeefdeadbeefLL),
|
||||
BPF_MOVSX64_REG(R1, R3, 32),
|
||||
BPF_JMP_REG(BPF_JEQ, R2, R1, 2),
|
||||
BPF_MOV32_IMM(R0, 2),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_MOV32_IMM(R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1 } },
|
||||
},
|
||||
/* BPF_ALU | BPF_ADD | BPF_X */
|
||||
{
|
||||
"ALU_ADD_X: 1 + 2 = 3",
|
||||
|
|
@ -6105,6 +6203,106 @@ static struct bpf_test tests[] = {
|
|||
{ },
|
||||
{ { 0, 2 } },
|
||||
},
|
||||
/* BPF_ALU | BPF_DIV | BPF_X off=1 (SDIV) */
|
||||
{
|
||||
"ALU_SDIV_X: -6 / 2 = -3",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, -6),
|
||||
BPF_ALU32_IMM(BPF_MOV, R1, 2),
|
||||
BPF_ALU32_REG_OFF(BPF_DIV, R0, R1, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, -3 } },
|
||||
},
|
||||
/* BPF_ALU | BPF_DIV | BPF_K off=1 (SDIV) */
|
||||
{
|
||||
"ALU_SDIV_K: -6 / 2 = -3",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, -6),
|
||||
BPF_ALU32_IMM_OFF(BPF_DIV, R0, 2, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, -3 } },
|
||||
},
|
||||
/* BPF_ALU64 | BPF_DIV | BPF_X off=1 (SDIV64) */
|
||||
{
|
||||
"ALU64_SDIV_X: -6 / 2 = -3",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, -6),
|
||||
BPF_ALU32_IMM(BPF_MOV, R1, 2),
|
||||
BPF_ALU64_REG_OFF(BPF_DIV, R0, R1, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, -3 } },
|
||||
},
|
||||
/* BPF_ALU64 | BPF_DIV | BPF_K off=1 (SDIV64) */
|
||||
{
|
||||
"ALU64_SDIV_K: -6 / 2 = -3",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, -6),
|
||||
BPF_ALU64_IMM_OFF(BPF_DIV, R0, 2, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, -3 } },
|
||||
},
|
||||
/* BPF_ALU | BPF_MOD | BPF_X off=1 (SMOD) */
|
||||
{
|
||||
"ALU_SMOD_X: -7 % 2 = -1",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, -7),
|
||||
BPF_ALU32_IMM(BPF_MOV, R1, 2),
|
||||
BPF_ALU32_REG_OFF(BPF_MOD, R0, R1, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, -1 } },
|
||||
},
|
||||
/* BPF_ALU | BPF_MOD | BPF_K off=1 (SMOD) */
|
||||
{
|
||||
"ALU_SMOD_K: -7 % 2 = -1",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, -7),
|
||||
BPF_ALU32_IMM_OFF(BPF_MOD, R0, 2, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, -1 } },
|
||||
},
|
||||
/* BPF_ALU64 | BPF_MOD | BPF_X off=1 (SMOD64) */
|
||||
{
|
||||
"ALU64_SMOD_X: -7 % 2 = -1",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, -7),
|
||||
BPF_ALU32_IMM(BPF_MOV, R1, 2),
|
||||
BPF_ALU64_REG_OFF(BPF_MOD, R0, R1, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, -1 } },
|
||||
},
|
||||
/* BPF_ALU64 | BPF_MOD | BPF_K off=1 (SMOD64) */
|
||||
{
|
||||
"ALU64_SMOD_X: -7 % 2 = -1",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, -7),
|
||||
BPF_ALU64_IMM_OFF(BPF_MOD, R0, 2, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, -1 } },
|
||||
},
|
||||
/* BPF_ALU | BPF_AND | BPF_X */
|
||||
{
|
||||
"ALU_AND_X: 3 & 2 = 2",
|
||||
|
|
@ -7837,6 +8035,104 @@ static struct bpf_test tests[] = {
|
|||
{ },
|
||||
{ { 0, (u32) (cpu_to_le64(0xfedcba9876543210ULL) >> 32) } },
|
||||
},
|
||||
/* BSWAP */
|
||||
{
|
||||
"BSWAP 16: 0x0123456789abcdef -> 0xefcd",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
|
||||
BPF_BSWAP(R0, 16),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0xefcd } },
|
||||
},
|
||||
{
|
||||
"BSWAP 32: 0x0123456789abcdef -> 0xefcdab89",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
|
||||
BPF_BSWAP(R0, 32),
|
||||
BPF_ALU64_REG(BPF_MOV, R1, R0),
|
||||
BPF_ALU64_IMM(BPF_RSH, R1, 32),
|
||||
BPF_ALU32_REG(BPF_ADD, R0, R1), /* R1 = 0 */
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0xefcdab89 } },
|
||||
},
|
||||
{
|
||||
"BSWAP 64: 0x0123456789abcdef -> 0x67452301",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
|
||||
BPF_BSWAP(R0, 64),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x67452301 } },
|
||||
},
|
||||
{
|
||||
"BSWAP 64: 0x0123456789abcdef >> 32 -> 0xefcdab89",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
|
||||
BPF_BSWAP(R0, 64),
|
||||
BPF_ALU64_IMM(BPF_RSH, R0, 32),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0xefcdab89 } },
|
||||
},
|
||||
/* BSWAP, reversed */
|
||||
{
|
||||
"BSWAP 16: 0xfedcba9876543210 -> 0x1032",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, 0xfedcba9876543210ULL),
|
||||
BPF_BSWAP(R0, 16),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x1032 } },
|
||||
},
|
||||
{
|
||||
"BSWAP 32: 0xfedcba9876543210 -> 0x10325476",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, 0xfedcba9876543210ULL),
|
||||
BPF_BSWAP(R0, 32),
|
||||
BPF_ALU64_REG(BPF_MOV, R1, R0),
|
||||
BPF_ALU64_IMM(BPF_RSH, R1, 32),
|
||||
BPF_ALU32_REG(BPF_ADD, R0, R1), /* R1 = 0 */
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x10325476 } },
|
||||
},
|
||||
{
|
||||
"BSWAP 64: 0xfedcba9876543210 -> 0x98badcfe",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, 0xfedcba9876543210ULL),
|
||||
BPF_BSWAP(R0, 64),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x98badcfe } },
|
||||
},
|
||||
{
|
||||
"BSWAP 64: 0xfedcba9876543210 >> 32 -> 0x10325476",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R0, 0xfedcba9876543210ULL),
|
||||
BPF_BSWAP(R0, 64),
|
||||
BPF_ALU64_IMM(BPF_RSH, R0, 32),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0x10325476 } },
|
||||
},
|
||||
/* BPF_LDX_MEM B/H/W/DW */
|
||||
{
|
||||
"BPF_LDX_MEM | BPF_B, base",
|
||||
|
|
@ -8228,6 +8524,67 @@ static struct bpf_test tests[] = {
|
|||
{ { 32, 0 } },
|
||||
.stack_depth = 0,
|
||||
},
|
||||
/* BPF_LDX_MEMSX B/H/W */
|
||||
{
|
||||
"BPF_LDX_MEMSX | BPF_B",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R1, 0xdead0000000000f0ULL),
|
||||
BPF_LD_IMM64(R2, 0xfffffffffffffff0ULL),
|
||||
BPF_STX_MEM(BPF_DW, R10, R1, -8),
|
||||
#ifdef __BIG_ENDIAN
|
||||
BPF_LDX_MEMSX(BPF_B, R0, R10, -1),
|
||||
#else
|
||||
BPF_LDX_MEMSX(BPF_B, R0, R10, -8),
|
||||
#endif
|
||||
BPF_JMP_REG(BPF_JNE, R0, R2, 1),
|
||||
BPF_ALU64_IMM(BPF_MOV, R0, 0),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0 } },
|
||||
.stack_depth = 8,
|
||||
},
|
||||
{
|
||||
"BPF_LDX_MEMSX | BPF_H",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R1, 0xdead00000000f123ULL),
|
||||
BPF_LD_IMM64(R2, 0xfffffffffffff123ULL),
|
||||
BPF_STX_MEM(BPF_DW, R10, R1, -8),
|
||||
#ifdef __BIG_ENDIAN
|
||||
BPF_LDX_MEMSX(BPF_H, R0, R10, -2),
|
||||
#else
|
||||
BPF_LDX_MEMSX(BPF_H, R0, R10, -8),
|
||||
#endif
|
||||
BPF_JMP_REG(BPF_JNE, R0, R2, 1),
|
||||
BPF_ALU64_IMM(BPF_MOV, R0, 0),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0 } },
|
||||
.stack_depth = 8,
|
||||
},
|
||||
{
|
||||
"BPF_LDX_MEMSX | BPF_W",
|
||||
.u.insns_int = {
|
||||
BPF_LD_IMM64(R1, 0x00000000deadbeefULL),
|
||||
BPF_LD_IMM64(R2, 0xffffffffdeadbeefULL),
|
||||
BPF_STX_MEM(BPF_DW, R10, R1, -8),
|
||||
#ifdef __BIG_ENDIAN
|
||||
BPF_LDX_MEMSX(BPF_W, R0, R10, -4),
|
||||
#else
|
||||
BPF_LDX_MEMSX(BPF_W, R0, R10, -8),
|
||||
#endif
|
||||
BPF_JMP_REG(BPF_JNE, R0, R2, 1),
|
||||
BPF_ALU64_IMM(BPF_MOV, R0, 0),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 0 } },
|
||||
.stack_depth = 8,
|
||||
},
|
||||
/* BPF_STX_MEM B/H/W/DW */
|
||||
{
|
||||
"BPF_STX_MEM | BPF_B",
|
||||
|
|
@ -9474,6 +9831,20 @@ static struct bpf_test tests[] = {
|
|||
{ },
|
||||
{ { 0, 1 } },
|
||||
},
|
||||
/* BPF_JMP32 | BPF_JA */
|
||||
{
|
||||
"JMP32_JA: Unconditional jump: if (true) return 1",
|
||||
.u.insns_int = {
|
||||
BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
||||
BPF_JMP32_IMM(BPF_JA, 0, 1, 0),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
INTERNAL,
|
||||
{ },
|
||||
{ { 0, 1 } },
|
||||
},
|
||||
/* BPF_JMP | BPF_JSLT | BPF_K */
|
||||
{
|
||||
"JMP_JSLT_K: Signed jump: if (-2 < -1) return 1",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue