From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 98723481252; Tue, 25 Aug 2026 13:40:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787665251; cv=none; b=V+8kyc6AuEcPQUojGvrCOj4F4j8RaufJFrVOM8NYlIpaSF8rMxmjxUS7b9P5Ww3yNwNcpQi3ge/lCDvknn7LEk1cvhapMBwfU8mHY0ZF5IM5MS1aFCNzTCYojc5aQDB9o3ixAtGbwEmt3aGwhnVA/VyiZYmSpxS/ryIAZMhQ9ps= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787665251; c=relaxed/simple; bh=vFVDVadC53VsEfvVhOXZAccM8bIzf8mqSi2zuHRFkIY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bjfVmjxyl5EKKODVYib8Sb0/K0NqGGvYKD+DUd8LAgFA9r86ou1yJcZxbNLtZ6oVIzuHACFm48QnieBiW+dBCUbpVQdiaDgv9iZcfRkhfqdukxnCHmfImENEcI463acuD1LWz4+Z5VnPmS9C8f5SadN++UxKNvrk//j1e0OM8vM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=VXiO8P0z; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="VXiO8P0z" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C372D1F000E9; Tue, 25 Aug 2026 13:40:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1787665250; bh=2zjrz3zeQ3e4LSF2uBTEqrdTGSN2L5XpEl6YgpYS/9c=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=VXiO8P0ziZ6ksvoNPYcbgjJe4yXvhuvenlIS5vVKrh9ZepYJp/S4wqwdKU+Gzlg2Y 9eXwMb96QiWnMs9Db0uT13HN2bse0HIzGN1ZXaLXA6+hv0kVMS+xhqPwtftchSzCCq jhBHor+kgta75StYI8egcMEPc68pmQeed8OuJ/as= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Mat Martineau , "Matthieu Baerts (NGI0)" , Jakub Kicinski , Sasha Levin Subject: [PATCH 6.18 57/94] mptcp: pm: use for_each_subflow helper Date: Tue, 25 Aug 2026 15:25:53 +0200 Message-ID: <20260825132544.132279524@linuxfoundation.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260825132541.887883084@linuxfoundation.org> References: <20260825132541.887883084@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 6.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: "Matthieu Baerts (NGI0)" [ Upstream commit f81689172429885d6c2c7c3dd4926ec626e794bb ] Similar to most places in the MPTCP code. So instead of passing the subflow list and use list_for_each_entry(subflow, list, node), pass the msk and use mptcp_for_each_subflow(msk, subflow). That's clearer and more uniform with the rest. While at it, add 'pm_' prefix for the exported one to easily identify the origin. Plus replace 'lookup' by 'has', because a bool is returned. Reviewed-by: Mat Martineau Signed-off-by: Matthieu Baerts (NGI0) Link: https://patch.msgid.link/20260605-net-next-mptcp-add-addr6-port-ts-v2-9-758e7ca73f4d@kernel.org Signed-off-by: Jakub Kicinski Stable-dep-of: efc33b5102ff ("mptcp: pm: fix memory leak from alloc-during-teardown race") Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- net/mptcp/pm.c | 6 +++--- net/mptcp/pm_kernel.c | 12 ++++++------ net/mptcp/pm_userspace.c | 2 +- net/mptcp/protocol.h | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -115,14 +115,14 @@ static bool mptcp_pm_is_init_remote_addr return mptcp_addresses_equal(&mpc_remote, remote, remote->port); } -bool mptcp_lookup_subflow_by_saddr(const struct list_head *list, - const struct mptcp_addr_info *saddr) +bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock *msk, + const struct mptcp_addr_info *saddr) { struct mptcp_subflow_context *subflow; struct mptcp_addr_info cur; struct sock_common *skc; - list_for_each_entry(subflow, list, node) { + mptcp_for_each_subflow(msk, subflow) { skc = (struct sock_common *)mptcp_subflow_tcp_sock(subflow); mptcp_local_address(skc, &cur); --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -86,13 +86,13 @@ u8 mptcp_pm_get_limit_extra_subflows(con } EXPORT_SYMBOL_GPL(mptcp_pm_get_limit_extra_subflows); -static bool lookup_subflow_by_daddr(const struct list_head *list, - const struct mptcp_addr_info *daddr) +static bool has_subflow_daddr(const struct mptcp_sock *msk, + const struct mptcp_addr_info *daddr) { struct mptcp_subflow_context *subflow; struct mptcp_addr_info cur; - list_for_each_entry(subflow, list, node) { + mptcp_for_each_subflow(msk, subflow) { struct sock *ssk = mptcp_subflow_tcp_sock(subflow); if (!((1 << inet_sk_state_load(ssk)) & @@ -652,7 +652,7 @@ static void mptcp_pm_nl_add_addr_receive mptcp_pm_addr_send_ack(msk); mptcp_mpc_endpoint_setup(msk); - if (lookup_subflow_by_daddr(&msk->conn_list, &remote)) + if (has_subflow_daddr(msk, &remote)) return; /* pick id 0 port, if none is provided the remote address */ @@ -1074,7 +1074,7 @@ static int mptcp_nl_remove_subflow_and_s goto next; lock_sock(sk); - remove_subflow = mptcp_lookup_subflow_by_saddr(&msk->conn_list, addr); + remove_subflow = mptcp_pm_has_subflow_saddr(msk, addr); mptcp_pm_remove_anno_addr(msk, addr, remove_subflow && !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT)); @@ -1202,7 +1202,7 @@ static void mptcp_pm_flush_addrs_and_sub list_for_each_entry(entry, rm_list, list) { if (slist.nr < MPTCP_RM_IDS_MAX && - mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) + mptcp_pm_has_subflow_saddr(msk, &entry->addr)) slist.ids[slist.nr++] = mptcp_endp_get_local_id(msk, &entry->addr); if (alist.nr < MPTCP_RM_IDS_MAX && --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -286,7 +286,7 @@ void mptcp_pm_remove_addr_entry(struct m /* only delete if either announced or matching a subflow */ if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) anno_nr++; - else if (!mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) + else if (!mptcp_pm_has_subflow_saddr(msk, &entry->addr)) return; alist.ids[alist.nr++] = entry->addr.id; --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1087,8 +1087,8 @@ bool mptcp_pm_sport_in_anno_list(struct struct mptcp_pm_add_entry * mptcp_pm_del_add_timer(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool check_id); -bool mptcp_lookup_subflow_by_saddr(const struct list_head *list, - const struct mptcp_addr_info *saddr); +bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock *msk, + const struct mptcp_addr_info *saddr); bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, const struct mptcp_addr_info *addr); int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local,