Fix devfs rules not applied by default for jails. [SA-14:07] Fix OpenSSL use-after-free vulnerability. [SA-14:08] Fix TCP reassembly vulnerability. [SA-14:09]
32 lines
1.2 KiB
Diff
32 lines
1.2 KiB
Diff
Index: sys/netinet/tcp_reass.c
|
|
===================================================================
|
|
--- sys/netinet/tcp_reass.c (revision 264836)
|
|
+++ sys/netinet/tcp_reass.c (working copy)
|
|
@@ -211,7 +211,7 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, int
|
|
* 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);
|
|
@@ -234,7 +234,7 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, int
|
|
*/
|
|
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;
|
|
@@ -282,7 +282,8 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, int
|
|
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
|