Re: [PATCH 5.17 114/158] mptcp: strict local address ID selection

From: Mat Martineau
Date: Mon May 23 2022 - 23:52:03 EST


On Mon, 23 May 2022, Greg Kroah-Hartman wrote:

From: Paolo Abeni <pabeni@xxxxxxxxxx>

[ Upstream commit 4cf86ae84c718333928fd2d43168a1e359a28329 ]

The address ID selection for MPJ subflows created in response
to incoming ADD_ADDR option is currently unreliable: it happens
at MPJ socket creation time, when the local address could be
unknown.

Additionally, if the no local endpoint is available for the local
address, a new dummy endpoint is created, confusing the user-land.

This change refactor the code to move the address ID selection inside
the rebuild_header() helper, when the local address eventually
selected by the route lookup is finally known. If the address used
is not mapped by any endpoint - and thus can't be advertised/removed
pick the id 0 instead of allocate a new endpoint.

Signed-off-by: Paolo Abeni <pabeni@xxxxxxxxxx>
Signed-off-by: Mat Martineau <mathew.j.martineau@xxxxxxxxxxxxxxx>
Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
---
net/mptcp/pm_netlink.c | 13 --------
net/mptcp/protocol.c | 3 ++
net/mptcp/protocol.h | 3 +-
net/mptcp/subflow.c | 67 ++++++++++++++++++++++++++++++++++++------
4 files changed, 63 insertions(+), 23 deletions(-)


Greg, Sasha -

Is it possible to drop this one patch? It makes one of the mptcp selftests fail (mptcp_join.sh, "single address, backup").

Looks like this patch has been included in stable because of this single hunk that helps "mptcp: Do TCP fallback on early DSS checksum failure" apply cleanly:

diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index aec767ee047a..e4413b3e50c2 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -442,7 +442,8 @@ struct mptcp_subflow_context {
rx_eof : 1,
can_ack : 1, /* only after processing the remote a key */
disposable : 1, /* ctx can be free at ulp release time */
- stale : 1; /* unable to snd/rcv data, do not use for xmit */
+ stale : 1, /* unable to snd/rcv data, do not use for xmit */
+ local_id_valid : 1; /* local_id is correctly initialized */
enum mptcp_data_avail data_avail;
u32 remote_nonce;
u64 thmac;

"mptcp: Do TCP fallback on early DSS checksum failure" also adds a bit to that bitfield, but there is no functional dependency between the patches.

If you need to drop the "mptcp: Do TCP fallback..." patch too, I can send a backported version tomorrow that accounts for that bitfield change.


Thanks!

--
Mat Martineau
Intel