lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CADxym3a1cp3kT2UTaQ7kmqEH7_xmKA_PZ7yJEoY3hLeJ05wNCA@mail.gmail.com>
Date: Wed, 13 Aug 2025 20:57:57 +0800
From: Menglong Dong <menglong8.dong@...il.com>
To: Kuniyuki Iwashima <kuniyu@...gle.com>
Cc: edumazet@...gle.com, ncardwell@...gle.com, davem@...emloft.net, 
	dsahern@...nel.org, kuba@...nel.org, pabeni@...hat.com, horms@...nel.org, 
	shuah@...nel.org, kraig@...gle.com, linux-kernel@...r.kernel.org, 
	netdev@...r.kernel.org, linux-kselftest@...r.kernel.org
Subject: Re: [PATCH net v3 2/2] selftests/net: test TCP reuseport socket selection

On Wed, Aug 6, 2025 at 3:01 AM Kuniyuki Iwashima <kuniyu@...gle.com> wrote:
>
> On Sat, Aug 2, 2025 at 2:24 AM Menglong Dong <menglong8.dong@...il.com> wrote:
> >
> > The test script is provided by Kuniyuki in [1], which is used to test the
> > selection of the TCP reuseport socket problem.
> >
> > Link: https://lore.kernel.org/netdev/20250801040757.1599996-1-kuniyu@google.com/ [1]
> > Signed-off-by: Menglong Dong <dongml2@...natelecom.cn>
> > ---
> >  tools/testing/selftests/net/Makefile         |  1 +
> >  tools/testing/selftests/net/tcp_reuseport.py | 36 ++++++++++++++++++++
> >  2 files changed, 37 insertions(+)
> >  create mode 100755 tools/testing/selftests/net/tcp_reuseport.py
> >
> > diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile
> > index b31a71f2b372..0f4c3eea9709 100644
> > --- a/tools/testing/selftests/net/Makefile
> > +++ b/tools/testing/selftests/net/Makefile
> > @@ -117,6 +117,7 @@ TEST_GEN_FILES += tfo
> >  TEST_PROGS += tfo_passive.sh
> >  TEST_PROGS += broadcast_pmtu.sh
> >  TEST_PROGS += ipv6_force_forwarding.sh
> > +TEST_PROGS += tcp_reuseport.py
> >
> >  # YNL files, must be before "include ..lib.mk"
> >  YNL_GEN_FILES := busy_poller netlink-dumps
> > diff --git a/tools/testing/selftests/net/tcp_reuseport.py b/tools/testing/selftests/net/tcp_reuseport.py
> > new file mode 100755
> > index 000000000000..eaeb7096382e
> > --- /dev/null
> > +++ b/tools/testing/selftests/net/tcp_reuseport.py
> > @@ -0,0 +1,36 @@
> > +#!/usr/bin/env python3
> > +# SPDX-License-Identifier: GPL-2.0
> > +
> > +import os
> > +
> > +from lib.py import ksft_run, ksft_exit
> > +from socket import *
> > +
> > +def test_reuseport_select() -> None:
> > +    s1 = socket()
> > +    s1.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1)
> > +    s1.setsockopt(SOL_SOCKET, SO_BINDTODEVICE, b'lo')
> > +    s1.listen()
> > +    s1.setblocking(False)
> > +
> > +    s2 = socket()
> > +    s2.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1)
> > +    s2.bind(s1.getsockname())
> > +    s2.listen()
> > +    s2.setblocking(False)
> > +
> > +    for i in range(3):
> > +        c = socket()
> > +        c.connect(s1.getsockname())
> > +        try:
> > +            print("SUCCESS: assigned properly:", s1.accept())
> > +        except:
> > +            print("FAIL: wrong assignment")
> > +            os.sys.exit(1)
>
> It seems you don't need to handle an exception with ksft.
> You can see os.sys.exit(1) triggers another exception when
> you run it without patch 1.
>
> TAP version 13
> 1..1
> # timeout set to 3600
> # selftests: net: tcp_reuseport.py
> # TAP version 13
> # 1..1
> # FAIL: wrong assignment
> # # Exception| Traceback (most recent call last):
> # # Exception|   File
> "/root/linux/tools/testing/selftests/net/./tcp_reuseport.py", line 26,
> in test_reuseport_select
> # # Exception|     print("SUCCESS: assigned properly:", s1.accept())
> # # Exception|                                          ~~~~~~~~~^^
> # # Exception|   File "/usr/lib64/python3.13/socket.py", line 295, in accept
> # # Exception|     fd, addr = self._accept()
> # # Exception|                ~~~~~~~~~~~~^^
> # # Exception| BlockingIOError: [Errno 11] Resource temporarily unavailable
> # # Exception|
> # # Exception| During handling of the above exception, another
> exception occurred:
> # # Exception|
> # # Exception| Traceback (most recent call last):
> # # Exception|   File
> "/root/linux/tools/testing/selftests/net/lib/py/ksft.py", line 244, in
> ksft_run
> # # Exception|     case(*args)
> # # Exception|     ~~~~^^^^^^^
> # # Exception|   File
> "/root/linux/tools/testing/selftests/net/./tcp_reuseport.py", line 29,
> in test_reuseport_select
> # # Exception|     os.sys.exit(1)
> # # Exception|     ~~~~~~~~~~~^^^
> # # Exception| SystemExit: 1
> # not ok 1 tcp_reuseport.test_reuseport_select
> # # Totals: pass:0 fail:1 xfail:0 xpass:0 skip:0 error:0
> not ok 1 selftests: net: tcp_reuseport.py # exit=1
>
>
> btw, I'd write an official uAPI selftest in plain C for socket as
> python sometimes does a tricky thing and I don't trust it.

Yeah, sounds nice, and C has better compatibility and
reliability for the testing.

>
> For example, this is...
>
> from socket import *
>
> s = socket()
> s.listen(-1)
>
> internally translated to:
>
> socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 3
> listen(3, 0)                            = 0

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ