Skip to content

Commit 0273b55

Browse files
matttbegregkh
authored andcommitted
mptcp: pm: re-using ID of unused removed subflows
commit edd8b5d upstream. If no subflow is attached to the 'subflow' endpoint that is being removed, the addr ID will not be marked as available again. Mark the linked ID as available when removing the 'subflow' endpoint if no subflow is attached to it. While at it, the local_addr_used counter is decremented if the ID was marked as being used to reflect the reality, but also to allow adding new endpoints after that. Fixes: b6c0838 ("mptcp: remove addr and subflow in PM netlink") Cc: stable@vger.kernel.org Reviewed-by: Mat Martineau <martineau@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://patch.msgid.link/20240819-net-mptcp-pm-reusing-id-v1-3-38035d40de5b@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 47a049b commit 0273b55

1 file changed

Lines changed: 10 additions & 1 deletion

File tree

net/mptcp/pm_netlink.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1469,8 +1469,17 @@ static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net,
14691469
remove_subflow = lookup_subflow_by_saddr(&msk->conn_list, addr);
14701470
mptcp_pm_remove_anno_addr(msk, addr, remove_subflow &&
14711471
!(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT));
1472-
if (remove_subflow)
1472+
1473+
if (remove_subflow) {
14731474
mptcp_pm_remove_subflow(msk, &list);
1475+
} else if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) {
1476+
/* If the subflow has been used, but now closed */
1477+
spin_lock_bh(&msk->pm.lock);
1478+
if (!__test_and_set_bit(entry->addr.id, msk->pm.id_avail_bitmap))
1479+
msk->pm.local_addr_used--;
1480+
spin_unlock_bh(&msk->pm.lock);
1481+
}
1482+
14741483
release_sock(sk);
14751484

14761485
next:

0 commit comments

Comments
 (0)