mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-21 11:13:30 +00:00
Fix TCP reassembly vulnerability.
Patch done by: glebius Security: FreeBSD-SA-14:08.tcp Security: CVE-2014-3000
This commit is contained in:
parent
e38c714ed3
commit
c6f70658c3
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=265121
@ -194,7 +194,7 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, int *tlenp, struct mbuf *m)
|
||||
* Investigate why and re-evaluate the below limit after the behaviour
|
||||
* is understood.
|
||||
*/
|
||||
if (th->th_seq != tp->rcv_nxt &&
|
||||
if ((th->th_seq != tp->rcv_nxt || !TCPS_HAVEESTABLISHED(tp->t_state)) &&
|
||||
tp->t_segqlen >= (so->so_rcv.sb_hiwat / tp->t_maxseg) + 1) {
|
||||
V_tcp_reass_overflows++;
|
||||
TCPSTAT_INC(tcps_rcvmemdrop);
|
||||
@ -217,7 +217,7 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, int *tlenp, struct mbuf *m)
|
||||
*/
|
||||
te = uma_zalloc(V_tcp_reass_zone, M_NOWAIT);
|
||||
if (te == NULL) {
|
||||
if (th->th_seq != tp->rcv_nxt) {
|
||||
if (th->th_seq != tp->rcv_nxt || !TCPS_HAVEESTABLISHED(tp->t_state)) {
|
||||
TCPSTAT_INC(tcps_rcvmemdrop);
|
||||
m_freem(m);
|
||||
*tlenp = 0;
|
||||
@ -265,7 +265,8 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, int *tlenp, struct mbuf *m)
|
||||
TCPSTAT_INC(tcps_rcvduppack);
|
||||
TCPSTAT_ADD(tcps_rcvdupbyte, *tlenp);
|
||||
m_freem(m);
|
||||
uma_zfree(V_tcp_reass_zone, te);
|
||||
if (te != &tqs)
|
||||
uma_zfree(V_tcp_reass_zone, te);
|
||||
tp->t_segqlen--;
|
||||
/*
|
||||
* Try to present any queued data
|
||||
|
Loading…
Reference in New Issue
Block a user