mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
synced 2026-04-17 22:23:45 -04:00
selftests: team: add non-Ethernet header_ops reproducer
Add a team selftest that sets up: g0 (gre) -> b0 (bond) -> t0 (team) and triggers IPv6 traffic on t0. This reproduces the non-Ethernet header_ops confusion scenario and protects against regressions in stacked team/bond/gre configurations. Using this script, the panic reported by syzkaller can be reproduced [1]. After the fix: # ./non_ether_header_ops.sh PASS: non-Ethernet header_ops stacking did not crash [1] https://syzkaller.appspot.com/bug?extid=3d8bc31c45e11450f24c Cc: Jiayuan Chen <jiayuan.chen@linux.dev> Signed-off-by: Jiayuan Chen <jiayuan.chen@shopee.com> Link: https://patch.msgid.link/20260320072139.134249-3-jiayuan.chen@linux.dev Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
425000dbf1
commit
56063823b9
@@ -3,6 +3,7 @@
|
||||
|
||||
TEST_PROGS := \
|
||||
dev_addr_lists.sh \
|
||||
non_ether_header_ops.sh \
|
||||
options.sh \
|
||||
propagation.sh \
|
||||
refleak.sh \
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
CONFIG_BONDING=y
|
||||
CONFIG_DUMMY=y
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_MACVLAN=y
|
||||
CONFIG_NETDEVSIM=m
|
||||
CONFIG_NET_IPGRE=y
|
||||
CONFIG_NET_TEAM=y
|
||||
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=y
|
||||
CONFIG_NET_TEAM_MODE_LOADBALANCE=y
|
||||
|
||||
41
tools/testing/selftests/drivers/net/team/non_ether_header_ops.sh
Executable file
41
tools/testing/selftests/drivers/net/team/non_ether_header_ops.sh
Executable file
@@ -0,0 +1,41 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# shellcheck disable=SC2154
|
||||
#
|
||||
# Reproduce the non-Ethernet header_ops confusion scenario with:
|
||||
# g0 (gre) -> b0 (bond) -> t0 (team)
|
||||
#
|
||||
# Before the fix, direct header_ops inheritance in this stack could call
|
||||
# callbacks with the wrong net_device context and crash.
|
||||
|
||||
lib_dir=$(dirname "$0")
|
||||
source "$lib_dir"/../../../net/lib.sh
|
||||
|
||||
trap cleanup_all_ns EXIT
|
||||
|
||||
setup_ns ns1
|
||||
|
||||
ip -n "$ns1" link add d0 type dummy
|
||||
ip -n "$ns1" addr add 10.10.10.1/24 dev d0
|
||||
ip -n "$ns1" link set d0 up
|
||||
|
||||
ip -n "$ns1" link add g0 type gre local 10.10.10.1
|
||||
ip -n "$ns1" link add b0 type bond mode active-backup
|
||||
ip -n "$ns1" link add t0 type team
|
||||
|
||||
ip -n "$ns1" link set g0 master b0
|
||||
ip -n "$ns1" link set b0 master t0
|
||||
|
||||
ip -n "$ns1" link set g0 up
|
||||
ip -n "$ns1" link set b0 up
|
||||
ip -n "$ns1" link set t0 up
|
||||
|
||||
# IPv6 address assignment triggers MLD join reports that call
|
||||
# dev_hard_header() on t0, exercising the inherited header_ops path.
|
||||
ip -n "$ns1" -6 addr add 2001:db8:1::1/64 dev t0 nodad
|
||||
for i in $(seq 1 20); do
|
||||
ip netns exec "$ns1" ping -6 -I t0 ff02::1 -c1 -W1 &>/dev/null || true
|
||||
done
|
||||
|
||||
echo "PASS: non-Ethernet header_ops stacking did not crash"
|
||||
exit "$EXIT_STATUS"
|
||||
Reference in New Issue
Block a user