diff options
author | Michael Tuexen <tuexen@FreeBSD.org> | 2021-05-03 00:50:05 +0000 |
---|---|---|
committer | Michael Tuexen <tuexen@FreeBSD.org> | 2021-06-02 21:54:34 +0000 |
commit | 50948b57070f91d8c99807bb7a698659bfbda6b4 (patch) | |
tree | c3afeee06d4da70a0736948164fab7b0efa18f74 | |
parent | 405bee30bc938e6c55a10ab68818573aca2de209 (diff) | |
download | src-50948b57070f91d8c99807bb7a698659bfbda6b4.tar.gz src-50948b57070f91d8c99807bb7a698659bfbda6b4.zip |
sctp: improve address list scanning
If the alternate address has to be removed, force the stack to
find a new one, if it is still needed.
(cherry picked from commit 8b3d0f6439fa27f0d37a9a7b9d27bbfdfdf487c4)
-rw-r--r-- | sys/netinet/sctp_pcb.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c index f4264ab387f1..08acccbf9185 100644 --- a/sys/netinet/sctp_pcb.c +++ b/sys/netinet/sctp_pcb.c @@ -6562,11 +6562,15 @@ next_param: /* remove and free it */ stcb->asoc.numnets--; TAILQ_REMOVE(&stcb->asoc.nets, net, sctp_next); - sctp_free_remote_addr(net); + if (net == stcb->asoc.alternate) { + sctp_free_remote_addr(stcb->asoc.alternate); + stcb->asoc.alternate = NULL; + } if (net == stcb->asoc.primary_destination) { stcb->asoc.primary_destination = NULL; sctp_select_primary_destination(stcb); } + sctp_free_remote_addr(net); } } if ((stcb->asoc.ecn_supported == 1) && |