This fixes a hole where rack could end up
sending an invalid segment into the reassembly queue. This would happen if you enabled the data after close option. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D16453
This commit is contained in:
parent
3810edcf6b
commit
4ad5b7a0ac
@ -4657,7 +4657,6 @@ rack_process_data(struct mbuf *m, struct tcphdr *th, struct socket *so,
|
|||||||
|
|
||||||
rack = (struct tcp_rack *)tp->t_fb_ptr;
|
rack = (struct tcp_rack *)tp->t_fb_ptr;
|
||||||
INP_WLOCK_ASSERT(tp->t_inpcb);
|
INP_WLOCK_ASSERT(tp->t_inpcb);
|
||||||
|
|
||||||
nsegs = max(1, m->m_pkthdr.lro_nsegs);
|
nsegs = max(1, m->m_pkthdr.lro_nsegs);
|
||||||
if ((thflags & TH_ACK) &&
|
if ((thflags & TH_ACK) &&
|
||||||
(SEQ_LT(tp->snd_wl1, th->th_seq) ||
|
(SEQ_LT(tp->snd_wl1, th->th_seq) ||
|
||||||
@ -4687,6 +4686,10 @@ rack_process_data(struct mbuf *m, struct tcphdr *th, struct socket *so,
|
|||||||
/* Make sure we output to start the timer */
|
/* Make sure we output to start the timer */
|
||||||
rack->r_wanted_output++;
|
rack->r_wanted_output++;
|
||||||
}
|
}
|
||||||
|
if (tp->t_flags2 & TF2_DROP_AF_DATA) {
|
||||||
|
m_freem(m);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* Process segments with URG.
|
* Process segments with URG.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user