[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