Author: tuexen
Date: Thu May 16 09:07:11 2019
New Revision: 347666
URL: https://svnweb.freebsd.org/changeset/base/347666

Log:
  MFC r344724:
  
  Allow SCTP stream reconfiguration operations only in ESTABLISHED
  state.
  
  This issue was found by running syzkaller.

Modified:
  stable/11/sys/netinet/sctp_usrreq.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/netinet/sctp_usrreq.c
==============================================================================
--- stable/11/sys/netinet/sctp_usrreq.c Thu May 16 09:05:15 2019        
(r347665)
+++ stable/11/sys/netinet/sctp_usrreq.c Thu May 16 09:07:11 2019        
(r347666)
@@ -4631,6 +4631,12 @@ sctp_setopt(struct socket *so, int optname, void *optv
                                SCTP_TCB_UNLOCK(stcb);
                                break;
                        }
+                       if (SCTP_GET_STATE(stcb) != SCTP_STATE_OPEN) {
+                               SCTP_LTRACE_ERR_RET(inp, NULL, NULL, 
SCTP_FROM_SCTP_USRREQ, EINVAL);
+                               error = EINVAL;
+                               SCTP_TCB_UNLOCK(stcb);
+                               break;
+                       }
                        if (sizeof(struct sctp_reset_streams) +
                            strrst->srs_number_streams * sizeof(uint16_t) > 
optsize) {
                                error = EINVAL;
@@ -4745,6 +4751,12 @@ sctp_setopt(struct socket *so, int optname, void *optv
                                SCTP_TCB_UNLOCK(stcb);
                                break;
                        }
+                       if (SCTP_GET_STATE(stcb) != SCTP_STATE_OPEN) {
+                               SCTP_LTRACE_ERR_RET(inp, NULL, NULL, 
SCTP_FROM_SCTP_USRREQ, EINVAL);
+                               error = EINVAL;
+                               SCTP_TCB_UNLOCK(stcb);
+                               break;
+                       }
                        if (stcb->asoc.stream_reset_outstanding) {
                                SCTP_LTRACE_ERR_RET(inp, NULL, NULL, 
SCTP_FROM_SCTP_USRREQ, EALREADY);
                                error = EALREADY;
@@ -4812,6 +4824,12 @@ sctp_setopt(struct socket *so, int optname, void *optv
                                 */
                                SCTP_LTRACE_ERR_RET(inp, NULL, NULL, 
SCTP_FROM_SCTP_USRREQ, EOPNOTSUPP);
                                error = EOPNOTSUPP;
+                               SCTP_TCB_UNLOCK(stcb);
+                               break;
+                       }
+                       if (SCTP_GET_STATE(stcb) != SCTP_STATE_OPEN) {
+                               SCTP_LTRACE_ERR_RET(inp, NULL, NULL, 
SCTP_FROM_SCTP_USRREQ, EINVAL);
+                               error = EINVAL;
                                SCTP_TCB_UNLOCK(stcb);
                                break;
                        }
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to