git: 8522f7ddac08 - stable/13 - sctp: Simplify the free port search in sctp_inpcb_bind()

Mark Johnston markj at FreeBSD.org
Tue Sep 7 13:36:26 UTC 2021


The branch stable/13 has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=8522f7ddac08dfd383f3c0564f785567b71a5105

commit 8522f7ddac08dfd383f3c0564f785567b71a5105
Author:     Mark Johnston <markj at FreeBSD.org>
AuthorDate: 2021-08-31 11:43:39 +0000
Commit:     Mark Johnston <markj at FreeBSD.org>
CommitDate: 2021-09-07 13:36:19 +0000

    sctp: Simplify the free port search in sctp_inpcb_bind()
    
    Eliminate a flag variable and reduce indentation.  No functional change
    intended.
    
    Reviewed by:    tuexen
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit 2496d812a9c781f8e4be1bfd22375c6e686665da)
---
 sys/netinet/sctp_pcb.c | 28 ++++++++++++----------------
 1 file changed, 12 insertions(+), 16 deletions(-)

diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c
index f55c3d4891a6..def6292456d4 100644
--- a/sys/netinet/sctp_pcb.c
+++ b/sys/netinet/sctp_pcb.c
@@ -3012,7 +3012,6 @@ continue_anyway:
 	} else {
 		uint16_t first, last, candidate;
 		uint16_t count;
-		int done;
 
 		if (ip_inp->inp_flags & INP_HIGHPORT) {
 			first = MODULE_GLOBAL(ipport_hifirstauto);
@@ -3040,25 +3039,22 @@ continue_anyway:
 		count = last - first + 1;	/* number of candidates */
 		candidate = first + sctp_select_initial_TSN(&inp->sctp_ep) % (count);
 
-		done = 0;
-		while (!done) {
+		for (;;) {
 			if (sctp_isport_inuse(inp, htons(candidate), inp->def_vrf_id) == NULL) {
-				done = 1;
+				lport = htons(candidate);
+				break;
 			}
-			if (!done) {
-				if (--count == 0) {
-					SCTP_INP_WUNLOCK(inp);
-					SCTP_INP_INFO_WUNLOCK();
-					SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_PCB, EADDRINUSE);
-					return (EADDRINUSE);
-				}
-				if (candidate == last)
-					candidate = first;
-				else
-					candidate = candidate + 1;
+			if (--count == 0) {
+				SCTP_INP_WUNLOCK(inp);
+				SCTP_INP_INFO_WUNLOCK();
+				SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_PCB, EADDRINUSE);
+				return (EADDRINUSE);
 			}
+			if (candidate == last)
+				candidate = first;
+			else
+				candidate = candidate + 1;
 		}
-		lport = htons(candidate);
 	}
 	if (inp->sctp_flags & (SCTP_PCB_FLAGS_SOCKET_GONE |
 	    SCTP_PCB_FLAGS_SOCKET_ALLGONE)) {


More information about the dev-commits-src-all mailing list