Author: tuexen
Date: Tue Mar 24 15:05:36 2015
New Revision: 280440
URL: https://svnweb.freebsd.org/changeset/base/280440

Log:
  Fix the bug in the handling of fragmented abandoned SCTP user messages 
reported in
  https://code.google.com/p/sctp-refimpl/issues/detail?id=11
  Thanks to Lally Singh for reporting it.
  MFC after: 3 days

Modified:
  head/sys/netinet/sctp_indata.c

Modified: head/sys/netinet/sctp_indata.c
==============================================================================
--- head/sys/netinet/sctp_indata.c      Tue Mar 24 14:51:46 2015        
(r280439)
+++ head/sys/netinet/sctp_indata.c      Tue Mar 24 15:05:36 2015        
(r280440)
@@ -2597,12 +2597,14 @@ sctp_process_segment_range(struct sctp_t
                         * cumack trackers for first transmissions,
                         * and retransmissions.
                         */
-                       if ((tp1->whoTo->find_pseudo_cumack == 1) && (tp1->sent 
< SCTP_DATAGRAM_RESEND) &&
+                       if ((tp1->sent < SCTP_DATAGRAM_RESEND) &&
+                           (tp1->whoTo->find_pseudo_cumack == 1) &&
                            (tp1->snd_count == 1)) {
                                tp1->whoTo->pseudo_cumack = 
tp1->rec.data.TSN_seq;
                                tp1->whoTo->find_pseudo_cumack = 0;
                        }
-                       if ((tp1->whoTo->find_rtx_pseudo_cumack == 1) && 
(tp1->sent < SCTP_DATAGRAM_RESEND) &&
+                       if ((tp1->sent < SCTP_DATAGRAM_RESEND) &&
+                           (tp1->whoTo->find_rtx_pseudo_cumack == 1) &&
                            (tp1->snd_count > 1)) {
                                tp1->whoTo->rtx_pseudo_cumack = 
tp1->rec.data.TSN_seq;
                                tp1->whoTo->find_rtx_pseudo_cumack = 0;
@@ -3512,7 +3514,7 @@ sctp_window_probe_recovery(struct sctp_t
        if ((tp1->sent >= SCTP_DATAGRAM_ACKED) || (tp1->data == NULL)) {
                /* TSN's skipped we do NOT move back. */
                sctp_misc_ints(SCTP_FLIGHT_LOG_DWN_WP_FWD,
-                   tp1->whoTo->flight_size,
+                   tp1->whoTo ? tp1->whoTo->flight_size : 0,
                    tp1->book_size,
                    (uintptr_t) tp1->whoTo,
                    tp1->rec.data.TSN_seq);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to