summaryrefslogtreecommitdiffstats
path: root/sys/contrib/ipfilter/netinet/ip_state.c
diff options
context:
space:
mode:
authordarrenr <darrenr@FreeBSD.org>2002-06-07 08:56:30 +0000
committerdarrenr <darrenr@FreeBSD.org>2002-06-07 08:56:30 +0000
commitdbc4d6b0e38e781d1a2fc5b28c852ee47bb4ce49 (patch)
tree79c45f15c6e0a4c606599d059ad3199a497403be /sys/contrib/ipfilter/netinet/ip_state.c
parenta98a42559d88c1293390a4d988a0d84337e2c3f7 (diff)
downloadFreeBSD-src-dbc4d6b0e38e781d1a2fc5b28c852ee47bb4ce49.zip
FreeBSD-src-dbc4d6b0e38e781d1a2fc5b28c852ee47bb4ce49.tar.gz
Commit changes that happened in IPFilter versions 3.4.27 - 3.4.28
Diffstat (limited to 'sys/contrib/ipfilter/netinet/ip_state.c')
-rw-r--r--sys/contrib/ipfilter/netinet/ip_state.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/sys/contrib/ipfilter/netinet/ip_state.c b/sys/contrib/ipfilter/netinet/ip_state.c
index be64b21..619c46b 100644
--- a/sys/contrib/ipfilter/netinet/ip_state.c
+++ b/sys/contrib/ipfilter/netinet/ip_state.c
@@ -577,9 +577,9 @@ u_int flags;
register u_int hv;
struct icmp *ic;
ipstate_t ips;
+ int out, ws;
u_int pass;
void *ifp;
- int out;
if (fr_state_lock || (fin->fin_off != 0) || (fin->fin_fl & FI_SHORT) ||
(fin->fin_misc & FM_BADSTATE))
@@ -693,8 +693,11 @@ u_int flags;
is->is_maxsend = is->is_send;
if ((tcp->th_flags & TH_SYN) &&
- ((tcp->th_off << 2) >= (sizeof(*tcp) + 4)))
- is->is_swscale = fr_tcpoptions(tcp);
+ ((tcp->th_off << 2) >= (sizeof(*tcp) + 4))) {
+ ws = fr_tcpoptions(tcp);
+ if (ws >= 0)
+ is->is_swscale = ws;
+ }
}
is->is_maxdwin = 1;
@@ -902,6 +905,7 @@ tcphdr_t *tcp;
fdata->td_wscale = wscale;
else if (wscale == -2)
fdata->td_wscale = tdata->td_wscale = 0;
+ win <<= fdata->td_wscale;
if ((fdata->td_end == 0) &&
(!is->is_fsm || ((tcp->th_flags & TH_OPENING) == TH_OPENING))) {
@@ -910,7 +914,9 @@ tcphdr_t *tcp;
*/
fdata->td_end = end;
fdata->td_maxwin = 1;
- fdata->td_maxend = end + 1;
+ fdata->td_maxend = end + win;
+ if (win == 0)
+ fdata->td_maxend++;
}
if (!(tcp->th_flags & TH_ACK)) { /* Pretend an ack was sent */
@@ -924,7 +930,6 @@ tcphdr_t *tcp;
if (seq == end)
seq = end = fdata->td_end;
- win <<= fdata->td_wscale;
maxwin = tdata->td_maxwin;
ackskew = tdata->td_end - ack;
@@ -1459,7 +1464,7 @@ icmp6again:
rev = fin->fin_rev;
if (is->is_frage[rev] != 0)
is->is_age = is->is_frage[rev];
- else if (fin->fin_rev)
+ else if (rev != 0)
is->is_age = fr_icmpacktimeout;
else
is->is_age = fr_icmptimeout;
OpenPOWER on IntegriCloud