summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Lennox <jonathan.lennox@8x8.com>2024-04-17 15:06:29 -0400
committerGitHub <noreply@github.com>2024-04-17 21:06:29 +0200
commit5335d225d144b7e15fd3ccb3e767b236c7582749 (patch)
tree2da145322f14c8cd38b3ea88454ba9b0b48086e4
parente8da23960041019e20723a8ef8d2fc1c61d83995 (diff)
Lock ACCEPT_LOCK before checking socket->so_head. (#698)
-rwxr-xr-xusrsctplib/netinet/sctp_input.c4
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