Author: tuexen
Date: Mon Jan 15 21:59:20 2018
New Revision: 328028
URL: https://svnweb.freebsd.org/changeset/base/328028

Log:
  Don't provide a (meaningless) cmsg when proving a notification
  in a recvmsg() call.
  
  MFC after:    1 week

Modified:
  head/sys/netinet/sctputil.c

Modified: head/sys/netinet/sctputil.c
==============================================================================
--- head/sys/netinet/sctputil.c Mon Jan 15 21:53:33 2018        (r328027)
+++ head/sys/netinet/sctputil.c Mon Jan 15 21:59:20 2018        (r328028)
@@ -47,7 +47,7 @@ __FBSDID("$FreeBSD$");
 #include <netinet/sctp_output.h>
 #include <netinet/sctp_uio.h>
 #include <netinet/sctp_timer.h>
-#include <netinet/sctp_indata.h>/* for sctp_deliver_data() */
+#include <netinet/sctp_indata.h>
 #include <netinet/sctp_auth.h>
 #include <netinet/sctp_asconf.h>
 #include <netinet/sctp_bsd_addr.h>
@@ -6094,7 +6094,7 @@ sctp_m_free(struct mbuf *m)
        return (m_free(m));
 }
 
-void 
+void
 sctp_m_freem(struct mbuf *mb)
 {
        while (mb != NULL)
@@ -6164,6 +6164,7 @@ sctp_soreceive(struct socket *so,
        struct sockaddr *from;
        struct sctp_extrcvinfo sinfo;
        int filling_sinfo = 1;
+       int flags;
        struct sctp_inpcb *inp;
 
        inp = (struct sctp_inpcb *)so->so_pcb;
@@ -6191,15 +6192,24 @@ sctp_soreceive(struct socket *so,
        if (filling_sinfo) {
                memset(&sinfo, 0, sizeof(struct sctp_extrcvinfo));
        }
-       error = sctp_sorecvmsg(so, uio, mp0, from, fromlen, flagsp,
+       if (flagsp != NULL) {
+               flags = *flagsp;
+       } else {
+               flags = 0;
+       }
+       error = sctp_sorecvmsg(so, uio, mp0, from, fromlen, &flags,
            (struct sctp_sndrcvinfo *)&sinfo, filling_sinfo);
+       if (flagsp != NULL) {
+               *flagsp = flags;
+       }
        if (controlp != NULL) {
                /* copy back the sinfo in a CMSG format */
-               if (filling_sinfo)
+               if (filling_sinfo && ((flags & MSG_NOTIFICATION) == 0)) {
                        *controlp = sctp_build_ctl_nchunk(inp,
                            (struct sctp_sndrcvinfo *)&sinfo);
-               else
+               } else {
                        *controlp = NULL;
+               }
        }
        if (psa) {
                /* copy back the address info */
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to