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;
|
||||
INP_WLOCK_ASSERT(tp->t_inpcb);
|
||||
|
||||
nsegs = max(1, m->m_pkthdr.lro_nsegs);
|
||||
if ((thflags & TH_ACK) &&
|
||||
(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 */
|
||||
rack->r_wanted_output++;
|
||||
}
|
||||
if (tp->t_flags2 & TF2_DROP_AF_DATA) {
|
||||
m_freem(m);
|
||||
return (0);
|
||||
}
|
||||
/*
|
||||
* Process segments with URG.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user