]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
mptcp: pm: re-using ID of unused removed ADD_ADDR
authorMatthieu Baerts (NGI0) <matttbe@kernel.org>
Mon, 19 Aug 2024 19:45:19 +0000 (21:45 +0200)
committerJakub Kicinski <kuba@kernel.org>
Wed, 21 Aug 2024 00:40:12 +0000 (17:40 -0700)
If no subflow is attached to the 'signal' endpoint that is being
removed, the addr ID will not be marked as available again.

Mark the linked ID as available when removing the address entry from the
list to cover this case.

Fixes: b6c08380860b ("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-1-38035d40de5b@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/pm_netlink.c

index 4cae2aa7be5cbcee6b24c3488792558d928c8180..26f0329e16bbf67e38483dd3fade7fb52847caa2 100644 (file)
@@ -1431,7 +1431,10 @@ static bool mptcp_pm_remove_anno_addr(struct mptcp_sock *msk,
        ret = remove_anno_list_by_saddr(msk, addr);
        if (ret || force) {
                spin_lock_bh(&msk->pm.lock);
-               msk->pm.add_addr_signaled -= ret;
+               if (ret) {
+                       __set_bit(addr->id, msk->pm.id_avail_bitmap);
+                       msk->pm.add_addr_signaled--;
+               }
                mptcp_pm_remove_addr(msk, &list);
                spin_unlock_bh(&msk->pm.lock);
        }