diff options
| author | Jonathan Lennox <jonathan.lennox@8x8.com> | 2024-04-17 15:06:29 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-17 21:06:29 +0200 |
| commit | 5335d225d144b7e15fd3ccb3e767b236c7582749 (patch) | |
| tree | 2da145322f14c8cd38b3ea88454ba9b0b48086e4 | |
| parent | e8da23960041019e20723a8ef8d2fc1c61d83995 (diff) | |
Lock ACCEPT_LOCK before checking socket->so_head. (#698)
| -rwxr-xr-x | usrsctplib/netinet/sctp_input.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/usrsctplib/netinet/sctp_input.c b/usrsctplib/netinet/sctp_input.c index 4ba8422..3b134c4 100755 --- a/usrsctplib/netinet/sctp_input.c +++ b/usrsctplib/netinet/sctp_input.c @@ -5934,6 +5934,7 @@ cksum_validated: if ((stcb != NULL) && ((stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) == 0) && (stcb->sctp_socket != NULL)) { + ACCEPT_LOCK(); if (stcb->sctp_socket->so_head != NULL) { upcall_socket = stcb->sctp_socket->so_head; } else { @@ -5942,6 +5943,7 @@ cksum_validated: SOCK_LOCK(upcall_socket); soref(upcall_socket); SOCK_UNLOCK(upcall_socket); + ACCEPT_UNLOCK(); } #endif if (IS_SCTP_CONTROL(ch)) { @@ -6037,6 +6039,7 @@ cksum_validated: if ((upcall_socket == NULL) && ((stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) == 0) && (stcb->sctp_socket != NULL)) { + ACCEPT_LOCK(); if (stcb->sctp_socket->so_head != NULL) { upcall_socket = stcb->sctp_socket->so_head; } else { @@ -6045,6 +6048,7 @@ cksum_validated: SOCK_LOCK(upcall_socket); soref(upcall_socket); SOCK_UNLOCK(upcall_socket); + ACCEPT_UNLOCK(); } #endif |
