Linux Kernel Selftest development
 help / color / mirror / Atom feed
* [PATCH net 0/9] mptcp: fixes for v6.5
@ 2023-07-04 20:44 Matthieu Baerts
  2023-07-04 20:44 ` [PATCH net 1/9] mptcp: ensure subflow is unhashed before cleaning the backlog Matthieu Baerts
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: Matthieu Baerts @ 2023-07-04 20:44 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Florian Westphal,
	Kishen Maloor
  Cc: netdev, linux-kernel, linux-kselftest, Matthieu Baerts, stable,
	Christoph Paasch

Here is a first batch of fixes for v6.5 and older.

The fixes are not linked to each others.

Patch 1 ensures subflows are unhashed before cleaning the backlog to
avoid races. This fixes another recent fix from v6.4.

Patch 2 does not rely on implicit state check in mptcp_listen() to avoid
races when receiving an MP_FASTCLOSE. A regression from v5.17.

The rest fixes issues in the selftests.

Patch 3 makes sure errors when setting up the environment are no longer
ignored. For v5.17+.

Patch 4 uses 'iptables-legacy' if available to be able to run on older
kernels. A fix for v5.13 and newer.

Patch 5 catches errors when issues are detected with packet marks. Also
for v5.13+.

Patch 6 uses the correct variable instead of an undefined one. Even if
there was no visible impact, it can help to find regressions later. An
issue visible in v5.19+.

Patch 7 makes sure errors with some sub-tests are reported to have the
selftest marked as failed as expected. Also for v5.19+.

Patch 8 adds a kernel config that is required to execute MPTCP
selftests. It is valid for v5.9+.

Patch 9 fixes issues when validating the userspace path-manager with
32-bit arch, an issue affecting v5.19+.

Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
Matthieu Baerts (7):
      selftests: mptcp: connect: fail if nft supposed to work
      selftests: mptcp: sockopt: use 'iptables-legacy' if available
      selftests: mptcp: sockopt: return error if wrong mark
      selftests: mptcp: userspace_pm: use correct server port
      selftests: mptcp: userspace_pm: report errors with 'remove' tests
      selftests: mptcp: depend on SYN_COOKIES
      selftests: mptcp: pm_nl_ctl: fix 32-bit support

Paolo Abeni (2):
      mptcp: ensure subflow is unhashed before cleaning the backlog
      mptcp: do not rely on implicit state check in mptcp_listen()

 net/mptcp/protocol.c                               |  7 +++++-
 tools/testing/selftests/net/mptcp/config           |  1 +
 tools/testing/selftests/net/mptcp/mptcp_connect.sh |  3 +++
 tools/testing/selftests/net/mptcp/mptcp_sockopt.sh | 29 ++++++++++++----------
 tools/testing/selftests/net/mptcp/pm_nl_ctl.c      | 10 ++++----
 tools/testing/selftests/net/mptcp/userspace_pm.sh  |  4 ++-
 6 files changed, 34 insertions(+), 20 deletions(-)
---
base-commit: 14bb236b29922c4f57d8c05bfdbcb82677f917c9
change-id: 20230704-upstream-net-20230704-misc-fixes-6-5-rc1-c52608649559

Best regards,
-- 
Matthieu Baerts <matthieu.baerts@tessares.net>


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH net 1/9] mptcp: ensure subflow is unhashed before cleaning the backlog
  2023-07-04 20:44 [PATCH net 0/9] mptcp: fixes for v6.5 Matthieu Baerts
@ 2023-07-04 20:44 ` Matthieu Baerts
  2023-07-04 20:44 ` [PATCH net 2/9] mptcp: do not rely on implicit state check in mptcp_listen() Matthieu Baerts
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Matthieu Baerts @ 2023-07-04 20:44 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Florian Westphal,
	Kishen Maloor
  Cc: netdev, linux-kernel, linux-kselftest, Matthieu Baerts, stable

From: Paolo Abeni <pabeni@redhat.com>

While tacking care of the mptcp-level listener I unintentionally
moved the subflow level unhash after the subflow listener backlog
cleanup.

That could cause some nasty race and makes the code harder to read.

Address the issue restoring the proper order of operations.

Fixes: 57fc0f1ceaa4 ("mptcp: ensure listener is unhashed before updating the sk status")
Cc: stable@vger.kernel.org
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 net/mptcp/protocol.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index e892673deb73..489a3defdde5 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -2909,10 +2909,10 @@ static void mptcp_check_listen_stop(struct sock *sk)
 		return;
 
 	lock_sock_nested(ssk, SINGLE_DEPTH_NESTING);
+	tcp_set_state(ssk, TCP_CLOSE);
 	mptcp_subflow_queue_clean(sk, ssk);
 	inet_csk_listen_stop(ssk);
 	mptcp_event_pm_listener(ssk, MPTCP_EVENT_LISTENER_CLOSED);
-	tcp_set_state(ssk, TCP_CLOSE);
 	release_sock(ssk);
 }
 

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net 2/9] mptcp: do not rely on implicit state check in mptcp_listen()
  2023-07-04 20:44 [PATCH net 0/9] mptcp: fixes for v6.5 Matthieu Baerts
  2023-07-04 20:44 ` [PATCH net 1/9] mptcp: ensure subflow is unhashed before cleaning the backlog Matthieu Baerts
@ 2023-07-04 20:44 ` Matthieu Baerts
  2023-07-04 20:44 ` [PATCH net 3/9] selftests: mptcp: connect: fail if nft supposed to work Matthieu Baerts
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Matthieu Baerts @ 2023-07-04 20:44 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Florian Westphal,
	Kishen Maloor
  Cc: netdev, linux-kernel, linux-kselftest, Matthieu Baerts, stable,
	Christoph Paasch

From: Paolo Abeni <pabeni@redhat.com>

Since the blamed commit, closing the first subflow resets the first
subflow socket state to SS_UNCONNECTED.

The current mptcp listen implementation relies only on such
state to prevent touching not-fully-disconnected sockets.

Incoming mptcp fastclose (or paired endpoint removal) unconditionally
closes the first subflow.

All the above allows an incoming fastclose followed by a listen() call
to successfully race with a blocking recvmsg(), potentially causing the
latter to hit a divide by zero bug in cleanup_rbuf/__tcp_select_window().

Address the issue explicitly checking the msk socket state in
mptcp_listen(). An alternative solution would be moving the first
subflow socket state update into mptcp_disconnect(), but in the long
term the first subflow socket should be removed: better avoid relaying
on it for internal consistency check.

Fixes: b29fcfb54cd7 ("mptcp: full disconnect implementation")
Cc: stable@vger.kernel.org
Reported-by: Christoph Paasch <cpaasch@apple.com>
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/414
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 net/mptcp/protocol.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 489a3defdde5..3613489eb6e3 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -3703,6 +3703,11 @@ static int mptcp_listen(struct socket *sock, int backlog)
 	pr_debug("msk=%p", msk);
 
 	lock_sock(sk);
+
+	err = -EINVAL;
+	if (sock->state != SS_UNCONNECTED || sock->type != SOCK_STREAM)
+		goto unlock;
+
 	ssock = __mptcp_nmpc_socket(msk);
 	if (IS_ERR(ssock)) {
 		err = PTR_ERR(ssock);

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net 3/9] selftests: mptcp: connect: fail if nft supposed to work
  2023-07-04 20:44 [PATCH net 0/9] mptcp: fixes for v6.5 Matthieu Baerts
  2023-07-04 20:44 ` [PATCH net 1/9] mptcp: ensure subflow is unhashed before cleaning the backlog Matthieu Baerts
  2023-07-04 20:44 ` [PATCH net 2/9] mptcp: do not rely on implicit state check in mptcp_listen() Matthieu Baerts
@ 2023-07-04 20:44 ` Matthieu Baerts
  2023-07-04 20:44 ` [PATCH net 4/9] selftests: mptcp: sockopt: use 'iptables-legacy' if available Matthieu Baerts
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Matthieu Baerts @ 2023-07-04 20:44 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Florian Westphal,
	Kishen Maloor
  Cc: netdev, linux-kernel, linux-kselftest, Matthieu Baerts, stable

In case of "external" errors when preparing the environment for the
TProxy tests, the subtests were marked as skipped.

This is fine but it means these errors are ignored. On MPTCP Public CI,
we do want to catch such issues and mark the selftest as failed if there
are such issues. We can then use mptcp_lib_fail_if_expected_feature()
helper that has been recently added to fail if needed.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: 5fb62e9cd3ad ("selftests: mptcp: add tproxy test case")
Cc: stable@vger.kernel.org
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/mptcp_connect.sh | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
index 13561e5bc0cd..bbae40882bfa 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
@@ -718,6 +718,7 @@ table inet mangle {
 EOF
 	if [ $? -ne 0 ]; then
 		echo "SKIP: $msg, could not load nft ruleset"
+		mptcp_lib_fail_if_expected_feature "nft rules"
 		return
 	fi
 
@@ -733,6 +734,7 @@ EOF
 	if [ $? -ne 0 ]; then
 		ip netns exec "$listener_ns" nft flush ruleset
 		echo "SKIP: $msg, ip $r6flag rule failed"
+		mptcp_lib_fail_if_expected_feature "ip rule"
 		return
 	fi
 
@@ -741,6 +743,7 @@ EOF
 		ip netns exec "$listener_ns" nft flush ruleset
 		ip -net "$listener_ns" $r6flag rule del fwmark 1 lookup 100
 		echo "SKIP: $msg, ip route add local $local_addr failed"
+		mptcp_lib_fail_if_expected_feature "ip route"
 		return
 	fi
 

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net 4/9] selftests: mptcp: sockopt: use 'iptables-legacy' if available
  2023-07-04 20:44 [PATCH net 0/9] mptcp: fixes for v6.5 Matthieu Baerts
                   ` (2 preceding siblings ...)
  2023-07-04 20:44 ` [PATCH net 3/9] selftests: mptcp: connect: fail if nft supposed to work Matthieu Baerts
@ 2023-07-04 20:44 ` Matthieu Baerts
  2023-07-04 20:44 ` [PATCH net 5/9] selftests: mptcp: sockopt: return error if wrong mark Matthieu Baerts
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Matthieu Baerts @ 2023-07-04 20:44 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Florian Westphal,
	Kishen Maloor
  Cc: netdev, linux-kernel, linux-kselftest, Matthieu Baerts, stable

IPTables commands using 'iptables-nft' fail on old kernels, at least
on v5.15 because it doesn't see the default IPTables chains:

  $ iptables -L
  iptables/1.8.2 Failed to initialize nft: Protocol not supported

As a first step before switching to NFTables, we can use iptables-legacy
if available.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: dc65fe82fb07 ("selftests: mptcp: add packet mark test case")
Cc: stable@vger.kernel.org
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/mptcp_sockopt.sh | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh
index f295a371ff14..c21bfd7f0c01 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh
@@ -12,6 +12,8 @@ ksft_skip=4
 timeout_poll=30
 timeout_test=$((timeout_poll * 2 + 1))
 mptcp_connect=""
+iptables="iptables"
+ip6tables="ip6tables"
 
 sec=$(date +%s)
 rndh=$(printf %x $sec)-$(mktemp -u XXXXXX)
@@ -25,7 +27,7 @@ add_mark_rules()
 	local m=$2
 
 	local t
-	for t in iptables ip6tables; do
+	for t in ${iptables} ${ip6tables}; do
 		# just to debug: check we have multiple subflows connection requests
 		ip netns exec $ns $t -A OUTPUT -p tcp --syn -m mark --mark $m -j ACCEPT
 
@@ -95,14 +97,14 @@ if [ $? -ne 0 ];then
 	exit $ksft_skip
 fi
 
-iptables -V > /dev/null 2>&1
-if [ $? -ne 0 ];then
+# Use the legacy version if available to support old kernel versions
+if iptables-legacy -V &> /dev/null; then
+	iptables="iptables-legacy"
+	ip6tables="ip6tables-legacy"
+elif ! iptables -V &> /dev/null; then
 	echo "SKIP: Could not run all tests without iptables tool"
 	exit $ksft_skip
-fi
-
-ip6tables -V > /dev/null 2>&1
-if [ $? -ne 0 ];then
+elif ! ip6tables -V &> /dev/null; then
 	echo "SKIP: Could not run all tests without ip6tables tool"
 	exit $ksft_skip
 fi
@@ -112,10 +114,10 @@ check_mark()
 	local ns=$1
 	local af=$2
 
-	local tables=iptables
+	local tables=${iptables}
 
 	if [ $af -eq 6 ];then
-		tables=ip6tables
+		tables=${ip6tables}
 	fi
 
 	local counters values

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net 5/9] selftests: mptcp: sockopt: return error if wrong mark
  2023-07-04 20:44 [PATCH net 0/9] mptcp: fixes for v6.5 Matthieu Baerts
                   ` (3 preceding siblings ...)
  2023-07-04 20:44 ` [PATCH net 4/9] selftests: mptcp: sockopt: use 'iptables-legacy' if available Matthieu Baerts
@ 2023-07-04 20:44 ` Matthieu Baerts
  2023-07-04 20:44 ` [PATCH net 6/9] selftests: mptcp: userspace_pm: use correct server port Matthieu Baerts
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Matthieu Baerts @ 2023-07-04 20:44 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Florian Westphal,
	Kishen Maloor
  Cc: netdev, linux-kernel, linux-kselftest, Matthieu Baerts, stable

When an error was detected when checking the marks, a message was
correctly printed mentioning the error but followed by another one
saying everything was OK and the selftest was not marked as failed as
expected.

Now the 'ret' variable is directly set to 1 in order to make sure the
exit is done with an error, similar to what is done in other functions.
While at it, the error is correctly propagated to the caller.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: dc65fe82fb07 ("selftests: mptcp: add packet mark test case")
Cc: stable@vger.kernel.org
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/mptcp_sockopt.sh | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh
index c21bfd7f0c01..dc8d473fc82c 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh
@@ -128,6 +128,7 @@ check_mark()
 	for v in $values; do
 		if [ $v -ne 0 ]; then
 			echo "FAIL: got $tables $values in ns $ns , not 0 - not all expected packets marked" 1>&2
+			ret=1
 			return 1
 		fi
 	done
@@ -227,11 +228,11 @@ do_transfer()
 	fi
 
 	if [ $local_addr = "::" ];then
-		check_mark $listener_ns 6
-		check_mark $connector_ns 6
+		check_mark $listener_ns 6 || retc=1
+		check_mark $connector_ns 6 || retc=1
 	else
-		check_mark $listener_ns 4
-		check_mark $connector_ns 4
+		check_mark $listener_ns 4 || retc=1
+		check_mark $connector_ns 4 || retc=1
 	fi
 
 	check_transfer $cin $sout "file received by server"

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net 6/9] selftests: mptcp: userspace_pm: use correct server port
  2023-07-04 20:44 [PATCH net 0/9] mptcp: fixes for v6.5 Matthieu Baerts
                   ` (4 preceding siblings ...)
  2023-07-04 20:44 ` [PATCH net 5/9] selftests: mptcp: sockopt: return error if wrong mark Matthieu Baerts
@ 2023-07-04 20:44 ` Matthieu Baerts
  2023-07-04 20:44 ` [PATCH net 7/9] selftests: mptcp: userspace_pm: report errors with 'remove' tests Matthieu Baerts
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Matthieu Baerts @ 2023-07-04 20:44 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Florian Westphal,
	Kishen Maloor
  Cc: netdev, linux-kernel, linux-kselftest, Matthieu Baerts, stable

"server4_port" variable is not set but "app4_port" is the server port in
v4 and the correct variable name to use.

The port is optional so there was no visible impact.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: ca188a25d43f ("selftests: mptcp: userspace PM support for MP_PRIO signals")
Cc: stable@vger.kernel.org
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/userspace_pm.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/testing/selftests/net/mptcp/userspace_pm.sh
index 98d9e4d2d3fc..841a67a7d524 100755
--- a/tools/testing/selftests/net/mptcp/userspace_pm.sh
+++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh
@@ -848,7 +848,7 @@ test_prio()
 	local count
 
 	# Send MP_PRIO signal from client to server machine
-	ip netns exec "$ns2" ./pm_nl_ctl set 10.0.1.2 port "$client4_port" flags backup token "$client4_token" rip 10.0.1.1 rport "$server4_port"
+	ip netns exec "$ns2" ./pm_nl_ctl set 10.0.1.2 port "$client4_port" flags backup token "$client4_token" rip 10.0.1.1 rport "$app4_port"
 	sleep 0.5
 
 	# Check TX

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net 7/9] selftests: mptcp: userspace_pm: report errors with 'remove' tests
  2023-07-04 20:44 [PATCH net 0/9] mptcp: fixes for v6.5 Matthieu Baerts
                   ` (5 preceding siblings ...)
  2023-07-04 20:44 ` [PATCH net 6/9] selftests: mptcp: userspace_pm: use correct server port Matthieu Baerts
@ 2023-07-04 20:44 ` Matthieu Baerts
  2023-07-04 20:44 ` [PATCH net 8/9] selftests: mptcp: depend on SYN_COOKIES Matthieu Baerts
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Matthieu Baerts @ 2023-07-04 20:44 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Florian Westphal,
	Kishen Maloor
  Cc: netdev, linux-kernel, linux-kselftest, Matthieu Baerts, stable

A message was mentioning an issue with the "remove" tests but the
selftest was not marked as failed.

Directly exit with an error like it is done everywhere else in this
selftest.

Link: https://github.com/multipath-tcp/mptcp_net-next/issues/368
Fixes: 259a834fadda ("selftests: mptcp: functional tests for the userspace PM type")
Cc: stable@vger.kernel.org
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/userspace_pm.sh | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/testing/selftests/net/mptcp/userspace_pm.sh
index 841a67a7d524..b180133a30af 100755
--- a/tools/testing/selftests/net/mptcp/userspace_pm.sh
+++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh
@@ -423,6 +423,7 @@ test_remove()
 		stdbuf -o0 -e0 printf "[OK]\n"
 	else
 		stdbuf -o0 -e0 printf "[FAIL]\n"
+		exit 1
 	fi
 
 	# RM_ADDR using an invalid addr id should result in no action
@@ -437,6 +438,7 @@ test_remove()
 		stdbuf -o0 -e0 printf "[OK]\n"
 	else
 		stdbuf -o0 -e0 printf "[FAIL]\n"
+		exit 1
 	fi
 
 	# RM_ADDR from the client to server machine

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net 8/9] selftests: mptcp: depend on SYN_COOKIES
  2023-07-04 20:44 [PATCH net 0/9] mptcp: fixes for v6.5 Matthieu Baerts
                   ` (6 preceding siblings ...)
  2023-07-04 20:44 ` [PATCH net 7/9] selftests: mptcp: userspace_pm: report errors with 'remove' tests Matthieu Baerts
@ 2023-07-04 20:44 ` Matthieu Baerts
  2023-07-04 20:44 ` [PATCH net 9/9] selftests: mptcp: pm_nl_ctl: fix 32-bit support Matthieu Baerts
  2023-07-05 10:00 ` [PATCH net 0/9] mptcp: fixes for v6.5 patchwork-bot+netdevbpf
  9 siblings, 0 replies; 11+ messages in thread
From: Matthieu Baerts @ 2023-07-04 20:44 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Florian Westphal,
	Kishen Maloor
  Cc: netdev, linux-kernel, linux-kselftest, Matthieu Baerts, stable

MPTCP selftests are using TCP SYN Cookies for quite a while now, since
v5.9.

Some CIs don't have this config option enabled and this is causing
issues in the tests:

  # ns1 MPTCP -> ns1 (10.0.1.1:10000      ) MPTCP     (duration   167ms) sysctl: cannot stat /proc/sys/net/ipv4/tcp_syncookies: No such file or directory
  # [ OK ]./mptcp_connect.sh: line 554: [: -eq: unary operator expected

There is no impact in the results but the test is not doing what it is
supposed to do.

Fixes: fed61c4b584c ("selftests: mptcp: make 2nd net namespace use tcp syn cookies unconditionally")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/config | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/testing/selftests/net/mptcp/config b/tools/testing/selftests/net/mptcp/config
index 6032f9b23c4c..e317c2e44dae 100644
--- a/tools/testing/selftests/net/mptcp/config
+++ b/tools/testing/selftests/net/mptcp/config
@@ -6,6 +6,7 @@ CONFIG_INET_DIAG=m
 CONFIG_INET_MPTCP_DIAG=m
 CONFIG_VETH=y
 CONFIG_NET_SCH_NETEM=m
+CONFIG_SYN_COOKIES=y
 CONFIG_NETFILTER=y
 CONFIG_NETFILTER_ADVANCED=y
 CONFIG_NETFILTER_NETLINK=m

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH net 9/9] selftests: mptcp: pm_nl_ctl: fix 32-bit support
  2023-07-04 20:44 [PATCH net 0/9] mptcp: fixes for v6.5 Matthieu Baerts
                   ` (7 preceding siblings ...)
  2023-07-04 20:44 ` [PATCH net 8/9] selftests: mptcp: depend on SYN_COOKIES Matthieu Baerts
@ 2023-07-04 20:44 ` Matthieu Baerts
  2023-07-05 10:00 ` [PATCH net 0/9] mptcp: fixes for v6.5 patchwork-bot+netdevbpf
  9 siblings, 0 replies; 11+ messages in thread
From: Matthieu Baerts @ 2023-07-04 20:44 UTC (permalink / raw)
  To: mptcp, Mat Martineau, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Shuah Khan, Florian Westphal,
	Kishen Maloor
  Cc: netdev, linux-kernel, linux-kselftest, Matthieu Baerts, stable

When using pm_nl_ctl to validate userspace path-manager's behaviours, it
was failing on 32-bit architectures ~half of the time.

pm_nl_ctl was not reporting any error but the command was not doing what
it was expected to do. As a result, the expected linked event was not
triggered after and the test failed.

This is due to the fact the token given in argument to the application
was parsed as an integer with atoi(): in a 32-bit arch, if the number
was bigger than INT_MAX, 2147483647 was used instead.

This can simply be fixed by using strtoul() instead of atoi().

The errors have been seen "by chance" when manually looking at the
results from LKFT.

Fixes: 9a0b36509df0 ("selftests: mptcp: support MPTCP_PM_CMD_ANNOUNCE")
Cc: stable@vger.kernel.org
Fixes: ecd2a77d672f ("selftests: mptcp: support MPTCP_PM_CMD_REMOVE")
Fixes: cf8d0a6dfd64 ("selftests: mptcp: support MPTCP_PM_CMD_SUBFLOW_CREATE")
Fixes: 57cc361b8d38 ("selftests: mptcp: support MPTCP_PM_CMD_SUBFLOW_DESTROY")
Fixes: ca188a25d43f ("selftests: mptcp: userspace PM support for MP_PRIO signals")
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
 tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
index abddf4c63e79..1887bd61bd9a 100644
--- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
+++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
@@ -425,7 +425,7 @@ int dsf(int fd, int pm_family, int argc, char *argv[])
 	}
 
 	/* token */
-	token = atoi(params[4]);
+	token = strtoul(params[4], NULL, 10);
 	rta = (void *)(data + off);
 	rta->rta_type = MPTCP_PM_ATTR_TOKEN;
 	rta->rta_len = RTA_LENGTH(4);
@@ -551,7 +551,7 @@ int csf(int fd, int pm_family, int argc, char *argv[])
 	}
 
 	/* token */
-	token = atoi(params[4]);
+	token = strtoul(params[4], NULL, 10);
 	rta = (void *)(data + off);
 	rta->rta_type = MPTCP_PM_ATTR_TOKEN;
 	rta->rta_len = RTA_LENGTH(4);
@@ -598,7 +598,7 @@ int remove_addr(int fd, int pm_family, int argc, char *argv[])
 			if (++arg >= argc)
 				error(1, 0, " missing token value");
 
-			token = atoi(argv[arg]);
+			token = strtoul(argv[arg], NULL, 10);
 			rta = (void *)(data + off);
 			rta->rta_type = MPTCP_PM_ATTR_TOKEN;
 			rta->rta_len = RTA_LENGTH(4);
@@ -710,7 +710,7 @@ int announce_addr(int fd, int pm_family, int argc, char *argv[])
 			if (++arg >= argc)
 				error(1, 0, " missing token value");
 
-			token = atoi(argv[arg]);
+			token = strtoul(argv[arg], NULL, 10);
 		} else
 			error(1, 0, "unknown keyword %s", argv[arg]);
 	}
@@ -1347,7 +1347,7 @@ int set_flags(int fd, int pm_family, int argc, char *argv[])
 				error(1, 0, " missing token value");
 
 			/* token */
-			token = atoi(argv[arg]);
+			token = strtoul(argv[arg], NULL, 10);
 		} else if (!strcmp(argv[arg], "flags")) {
 			char *tok, *str;
 

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH net 0/9] mptcp: fixes for v6.5
  2023-07-04 20:44 [PATCH net 0/9] mptcp: fixes for v6.5 Matthieu Baerts
                   ` (8 preceding siblings ...)
  2023-07-04 20:44 ` [PATCH net 9/9] selftests: mptcp: pm_nl_ctl: fix 32-bit support Matthieu Baerts
@ 2023-07-05 10:00 ` patchwork-bot+netdevbpf
  9 siblings, 0 replies; 11+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-07-05 10:00 UTC (permalink / raw)
  To: Matthieu Baerts
  Cc: mptcp, martineau, davem, edumazet, kuba, pabeni, shuah, fw,
	kishen.maloor, netdev, linux-kernel, linux-kselftest, stable,
	cpaasch

Hello:

This series was applied to netdev/net.git (main)
by David S. Miller <davem@davemloft.net>:

On Tue, 04 Jul 2023 22:44:32 +0200 you wrote:
> Here is a first batch of fixes for v6.5 and older.
> 
> The fixes are not linked to each others.
> 
> Patch 1 ensures subflows are unhashed before cleaning the backlog to
> avoid races. This fixes another recent fix from v6.4.
> 
> [...]

Here is the summary with links:
  - [net,1/9] mptcp: ensure subflow is unhashed before cleaning the backlog
    https://git.kernel.org/netdev/net/c/3fffa15bfef4
  - [net,2/9] mptcp: do not rely on implicit state check in mptcp_listen()
    https://git.kernel.org/netdev/net/c/0226436acf24
  - [net,3/9] selftests: mptcp: connect: fail if nft supposed to work
    https://git.kernel.org/netdev/net/c/221e4550454a
  - [net,4/9] selftests: mptcp: sockopt: use 'iptables-legacy' if available
    https://git.kernel.org/netdev/net/c/a5a5990c099d
  - [net,5/9] selftests: mptcp: sockopt: return error if wrong mark
    https://git.kernel.org/netdev/net/c/9ac4c28eb70c
  - [net,6/9] selftests: mptcp: userspace_pm: use correct server port
    https://git.kernel.org/netdev/net/c/d8566d0e0392
  - [net,7/9] selftests: mptcp: userspace_pm: report errors with 'remove' tests
    https://git.kernel.org/netdev/net/c/966c6c3adfb1
  - [net,8/9] selftests: mptcp: depend on SYN_COOKIES
    https://git.kernel.org/netdev/net/c/6c8880fcaa5c
  - [net,9/9] selftests: mptcp: pm_nl_ctl: fix 32-bit support
    https://git.kernel.org/netdev/net/c/61d965805026

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2023-07-05 10:00 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-04 20:44 [PATCH net 0/9] mptcp: fixes for v6.5 Matthieu Baerts
2023-07-04 20:44 ` [PATCH net 1/9] mptcp: ensure subflow is unhashed before cleaning the backlog Matthieu Baerts
2023-07-04 20:44 ` [PATCH net 2/9] mptcp: do not rely on implicit state check in mptcp_listen() Matthieu Baerts
2023-07-04 20:44 ` [PATCH net 3/9] selftests: mptcp: connect: fail if nft supposed to work Matthieu Baerts
2023-07-04 20:44 ` [PATCH net 4/9] selftests: mptcp: sockopt: use 'iptables-legacy' if available Matthieu Baerts
2023-07-04 20:44 ` [PATCH net 5/9] selftests: mptcp: sockopt: return error if wrong mark Matthieu Baerts
2023-07-04 20:44 ` [PATCH net 6/9] selftests: mptcp: userspace_pm: use correct server port Matthieu Baerts
2023-07-04 20:44 ` [PATCH net 7/9] selftests: mptcp: userspace_pm: report errors with 'remove' tests Matthieu Baerts
2023-07-04 20:44 ` [PATCH net 8/9] selftests: mptcp: depend on SYN_COOKIES Matthieu Baerts
2023-07-04 20:44 ` [PATCH net 9/9] selftests: mptcp: pm_nl_ctl: fix 32-bit support Matthieu Baerts
2023-07-05 10:00 ` [PATCH net 0/9] mptcp: fixes for v6.5 patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox