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] [day] [month] [year] [list]
Message-ID: <20251105213137.2knkuovcc3jpnhqv@skbuf>
Date: Wed, 5 Nov 2025 23:31:37 +0200
From: Vladimir Oltean <vladimir.oltean@....com>
To: "A. Sverdlin" <alexander.sverdlin@...mens.com>
Cc: netdev@...r.kernel.org, linux-kselftest@...r.kernel.org,
	"David S. Miller" <davem@...emloft.net>,
	Eric Dumazet <edumazet@...gle.com>,
	Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>,
	Simon Horman <horms@...nel.org>, Shuah Khan <shuah@...nel.org>,
	linux-kernel@...r.kernel.org
Subject: Re: [PATCH] selftests: net: local_termination: Wait for interfaces
 to come up

On Tue, Nov 04, 2025 at 07:17:21AM +0100, A. Sverdlin wrote:
> From: Alexander Sverdlin <alexander.sverdlin@...mens.com>
> 
> It seems that most of the tests prepare the interfaces once before the test
> run (setup_prepare()), rely on setup_wait() to wait for link and only then
> run the test(s).
> 
> local_termination brings the physical interfaces down and up during test
> run but never wait for them to come up. If the auto-negotiation takes
> some seconds, first test packets are being lost, which leads to
> false-negative test results.

Yes, sorry, dropping the link is an unfortunate, undesirable and
unaccounted for side effect of simple_if_init and simple_if_fini,
mainly used for moving the IP addresses from the physical to the various
virtual upper interfaces.

> 
> Use setup_wait_dev() after corresponding simple_if_init() on physical
> interfaces to make sure auto-negotiation has been completed and test
> packets will not be lost because of the race against link establishment.
> 
> The wait has to be done in each individual test because the interfaces
> have to be brough up first and only then we can wait for link (not
> individually, because they are expected to be looped in pairs).
> 
> Fixes: 90b9566aa5cd3f ("selftests: forwarding: add a test for local_termination.sh")
> Signed-off-by: Alexander Sverdlin <alexander.sverdlin@...mens.com>
> ---
>  .../selftests/net/forwarding/local_termination.sh      | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/tools/testing/selftests/net/forwarding/local_termination.sh b/tools/testing/selftests/net/forwarding/local_termination.sh
> index ecd34f364125c..369c8b2c1f4a2 100755
> --- a/tools/testing/selftests/net/forwarding/local_termination.sh
> +++ b/tools/testing/selftests/net/forwarding/local_termination.sh
> @@ -430,6 +430,8 @@ standalone()
>  	h1_create
>  	h2_create
>  	macvlan_create $h2
> +	setup_wait_dev $h1
> +	setup_wait_dev $h2
>  
>  	run_test $h1 $h2 $skip_ptp $no_unicast_flt "$h2"
>  
> @@ -448,6 +450,8 @@ test_bridge()
>  	bridge_create $vlan_filtering
>  	simple_if_init br0 $H2_IPV4/24 $H2_IPV6/64
>  	macvlan_create br0
> +	setup_wait_dev $h1
> +	setup_wait_dev $h2
>  
>  	run_test $h1 br0 $skip_ptp $no_unicast_flt \
>  		"vlan_filtering=$vlan_filtering bridge"
> @@ -480,6 +484,8 @@ test_vlan()
>  	h1_vlan_create
>  	h2_vlan_create
>  	macvlan_create $h2.100
> +	setup_wait_dev $h1
> +	setup_wait_dev $h2
>  
>  	run_test $h1.100 $h2.100 $skip_ptp $no_unicast_flt "VLAN upper"
>  
> @@ -505,6 +511,8 @@ vlan_over_bridged_port()
>  	h2_vlan_create
>  	bridge_create $vlan_filtering
>  	macvlan_create $h2.100
> +	setup_wait_dev $h1
> +	setup_wait_dev $h2
>  
>  	run_test $h1.100 $h2.100 $skip_ptp $no_unicast_flt \
>  		"VLAN over vlan_filtering=$vlan_filtering bridged port"
> @@ -536,6 +544,8 @@ vlan_over_bridge()
>  	simple_if_init br0
>  	vlan_create br0 100 vbr0 $H2_IPV4/24 $H2_IPV6/64
>  	macvlan_create br0.100
> +	setup_wait_dev $h1
> +	setup_wait_dev $h2
>  
>  	if [ $vlan_filtering = 1 ]; then
>  		bridge vlan add dev $h2 vid 100 master
> -- 
> 2.51.1
>

Functionally I have nothing against this change.

Reviewed-by: Vladimir Oltean <vladimir.oltean@....com>

Two ideas to minimize the delta in a more obviously correct way.
They can perhaps be implemented together, independently of one another,
or not at all:

- setup_wait() could be used directly, as it waits for $NUM_NETIFS, aka
  $h1 and $h2.
- There is no case where run_test() does not need a prior setup_wait()
  call, so it can just as well be placed as the first thing of that
  function.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ