[SRU][N/J][PATCH 0/2] veth.sh from ubuntu_kselftests_net failed on J-5.15 / N-6.8 (with xdp attached - gro flag) (LP: #2065369)
Massimiliano Pellizzer
massimiliano.pellizzer at canonical.com
Fri Dec 5 15:16:22 UTC 2025
BugLink: https://bugs.launchpad.net/bugs/2065369
[ Impact ]
The test veth.sh from ubuntu_kselftests_net fails on both Jammy and Noble.
...
bad setting: reducing RX nr below peer TX with XDP set ok
with xdp attached - gro flag fail - expected on
found off
- peer gro flag ok
- tso flag ok
- peer tso flag ok
- aggregation fail - got 10
packets, expected 1
- after dev off, flag fail - expected on
found off
- peer flag ok
...
The test execution reveals a consistent failure pattern
during the interaction between XDP program attachment and GRO
feature state management on veth interfaces.
It is possible to notice that the commit
d7db7775ea2e (net: veth: do not manipulate GRO when using XDP)
changed the veth driver's behavior by removing automatic GRO manipulation
when XDP programs attach or detach.
Both Noble and Jammy includes this behavioral change,
but the kselftest net:vet.sh has not been update accordingly.
In practice, commit ba5a6476e386 (selftests: net: veth: test the ability
to independently manipulate GRO and XDP) it’s missing.
This creates a mismatch between actual kernel behavior and test expectations.
[ Fix ]
Backport commit ba5a6476e386 (selftests: net: veth: test the ability
to independently manipulate GRO and XDP) from mainline.
[ Test Plan ]
Execute net:vet.sh on both Noble and Jammy.
In Noble:
$ uname -a
Linux ubuntu-noble-amd64-server 6.8.0-91-generic #92-Ubuntu SMP PREEMPT_DYNAMIC
Fri Nov 28 16:26:35 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
$ sudo apt install -y build-essential docutils-common ethtool iptables jq
kernel-wedge libfuse-dev libnuma-dev libssl-dev net-tools pkg-config tcpdump
uuid-runtime socat netsniff-ng libcap-dev libelf-dev clang llvm
$ fakeroot debian/rules clean
$ make -j$(nproc) headers
$ sudo make run_tests -C tools/testing/selftests/net TEST_PROGS=veth.sh
# selftests: net: veth.sh
# default - gro flag ok
# - peer gro flag ok
# - tso flag ok
# - peer tso flag ok
# - aggregation ok
# - aggregation with TSO off ok
# with gro on - gro flag ok
# - peer gro flag ok
# - tso flag ok
# - peer tso flag ok
# - aggregation with TSO off ok
# gro vs xdp while down - gro flag off ok
# - after down ok
# - after xdp off ok
# - after up ok
# - after peer xdp ok
# gro vs xdp while down - gro flag on ok
# - after down ok
# - after xdp off ok
# - after up ok
# - after peer xdp ok
# default channels ok
# with gro enabled on link down - gro flag ok
# - peer gro flag ok
# - tso flag ok
# - peer tso flag ok
# - aggregation with TSO off ok
# setting tx channels ok
# setting both rx and tx channels ok
# bad setting: combined channels ok
# setting invalid channels nr ok
# bad setting: XDP with RX nr less than TX ok
# bad setting: reducing RX nr below peer TX with XDP set ok
# bad setting: increasing peer TX nr above RX with XDP set ok
# setting invalid channels nr ok
# with xdp attached - gro flag ok
# - peer gro flag ok
# - tso flag ok
# - peer tso flag ok
# - no aggregation ok
# - gro flag with GRO on ok
# - aggregation ok
# - after dev off, flag ok
# - peer flag ok
# - after gro on xdp off, gro flag ok
# - peer gro flag ok
# - tso flag ok
# - peer tso flag ok
# decreasing tx channels with device down ok
# - aggregation ok
# increasing tx channels with device down ok
# aggregation again with default and TSO off ok
ok 14 selftests: net: veth.sh
In Jammy:
$ uname -a
Linux ubuntu-jammy-amd64-server 5.15.0-163-generic #173-Ubuntu SMP Tue Oct 14
17:51:00 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
$ sudo apt install -y build-essential docutils-common ethtool iptables jq
kernel-wedge libfuse-dev libnuma-dev libssl-dev net-tools pkg-config tcpdump
uuid-runtime socat netsniff-ng libcap-dev libelf-dev clang llvm
$ fakeroot debian/rules clean
$ make -j$(nproc) headers
$ make -j$(nproc) -C tools/testing/selftests TARGETS=bpf SKIP_TARGETS=
KDIR=/usr/src/linux-headers-5.15.0-163-generic
$ sudo make run_tests -C tools/testing/selftests/net TEST_PROGS=veth.sh
# selftests: net: veth.sh
# default - gro flag ok
# - peer gro flag ok
# - tso flag ok
# - peer tso flag ok
# - aggregation ok
# - aggregation with TSO off ok
# with gro on - gro flag ok
# - peer gro flag ok
# - tso flag ok
# - peer tso flag ok
# - aggregation with TSO off ok
# gro vs xdp while down - gro flag on ok
# - after down ok
# - after xdp off ok
# - after up ok
# - after peer xdp ok
# default channels ok
# with gro enabled on link down - gro flag ok
# - peer gro flag ok
# - tso flag ok
# - peer tso flag ok
# - aggregation with TSO off ok
# setting tx channels ok
# setting both rx and tx channels ok
# bad setting: combined channels ok
# setting invalid channels nr ok
# bad setting: XDP with RX nr less than TX ok
# bad setting: reducing RX nr below peer TX with XDP set ok
# bad setting: increasing peer TX nr above RX with XDP set ok
# setting invalid channels nr ok
# with xdp attached - gro flag ok
# - peer gro flag ok
# - tso flag ok
# - peer tso flag ok
# - no aggregation ok
# - gro flag with GRO on ok
# - aggregation ok
# - after dev off, flag ok
# - peer flag ok
# - after gro on xdp off, gro flag ok
# - peer gro flag ok
# - tso flag ok
# - peer tso flag ok
# decreasing tx channels with device down ok
# - aggregation ok
# increasing tx channels with device down ok
# aggregation again with default and TSO off ok
ok 7 selftests: net: veth.sh
[ Regression Potential ]
The fix affects only scripts in kselftest.
No regression potential for the kernel.
More information about the kernel-team
mailing list