Date: Wed, 1 Feb 2023 22:46:37 GMT From: Michael Tuexen <tuexen@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: 8c5796ba8e32 - stable/13 - sctp: improve locking Message-ID: <202302012246.311MkbOE002809@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by tuexen: URL: https://cgit.FreeBSD.org/src/commit/?id=8c5796ba8e329c9e202e0e914e8e98fed4cd2248 commit 8c5796ba8e329c9e202e0e914e8e98fed4cd2248 Author: Michael Tuexen <tuexen@FreeBSD.org> AuthorDate: 2022-04-27 14:07:31 +0000 Commit: Michael Tuexen <tuexen@FreeBSD.org> CommitDate: 2023-02-01 22:46:14 +0000 sctp: improve locking While there, do some cleanup. Reported by: syzbot+f475e054c454310bc26d@syzkaller.appspotmail.com (cherry picked from commit 490a0f77de77321859eeeecc807f9cc7bb41dbcc) --- sys/netinet/sctputil.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/sys/netinet/sctputil.c b/sys/netinet/sctputil.c index 9405814d3d13..dad937f15172 100644 --- a/sys/netinet/sctputil.c +++ b/sys/netinet/sctputil.c @@ -4870,8 +4870,9 @@ sctp_add_to_readq(struct sctp_inpcb *inp, #endif return; } - if (inp_read_lock_held == 0) + if (inp_read_lock_held == SCTP_READ_LOCK_NOT_HELD) { SCTP_INP_READ_LOCK(inp); + } if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_CANT_READ) { if (!control->on_strm_q) { sctp_free_remote_addr(control->whoFrom); @@ -4881,8 +4882,9 @@ sctp_add_to_readq(struct sctp_inpcb *inp, } sctp_free_a_readq(stcb, control); } - if (inp_read_lock_held == 0) + if (inp_read_lock_held == SCTP_READ_LOCK_NOT_HELD) { SCTP_INP_READ_UNLOCK(inp); + } return; } if (!(control->spec_flags & M_NOTIFICATION)) { @@ -4894,7 +4896,7 @@ sctp_add_to_readq(struct sctp_inpcb *inp, m = control->data; control->held_length = 0; control->length = 0; - while (m) { + while (m != NULL) { if (SCTP_BUF_LEN(m) == 0) { /* Skip mbufs with NO length */ if (prev == NULL) { @@ -4938,11 +4940,12 @@ sctp_add_to_readq(struct sctp_inpcb *inp, } TAILQ_INSERT_TAIL(&inp->read_queue, control, next); control->on_read_q = 1; - if (inp_read_lock_held == 0) - SCTP_INP_READ_UNLOCK(inp); - if (inp && inp->sctp_socket) { + if ((inp != NULL) && (inp->sctp_socket != NULL)) { sctp_wakeup_the_read_socket(inp, stcb, so_locked); } + if (inp_read_lock_held == SCTP_READ_LOCK_NOT_HELD) { + SCTP_INP_READ_UNLOCK(inp); + } } /*************HOLD THIS COMMENT FOR PATCH FILE OF
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202302012246.311MkbOE002809>