diff options
Diffstat (limited to 'sys/netinet/sctp_output.c')
-rw-r--r-- | sys/netinet/sctp_output.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/sys/netinet/sctp_output.c b/sys/netinet/sctp_output.c index cb8b93f..430f853 100644 --- a/sys/netinet/sctp_output.c +++ b/sys/netinet/sctp_output.c @@ -9653,7 +9653,7 @@ sctp_send_packet_dropped(struct sctp_tcb *stcb, struct sctp_nets *net, int len; int was_trunc = 0; struct ip *iph; - int fullsz = 0, trimby = 0; + int fullsz = 0, extra = 0; long spc; asoc = &stcb->asoc; @@ -9674,6 +9674,7 @@ sctp_send_packet_dropped(struct sctp_tcb *stcb, struct sctp_nets *net, chk->copy_by_ref = 0; iph = mtod(m, struct ip *); if (iph == NULL) { + sctp_free_a_chunk(stcb, chk); return; } if (iph->ip_v == IPVERSION) { @@ -9691,10 +9692,8 @@ sctp_send_packet_dropped(struct sctp_tcb *stcb, struct sctp_nets *net, /* * only send 1 mtu worth, trim off the excess on the end. */ - fullsz = len + SCTP_MAX_OVERHEAD; + fullsz = len - extra; len = min(stcb->asoc.smallest_mtu, MCLBYTES) - SCTP_MAX_OVERHEAD; - trimby = len - fullsz; - m_adj(m, trimby); was_trunc = 1; } chk->asoc = &stcb->asoc; |