|
@@ -1066,9 +1066,7 @@ static bool tcp_new(struct nf_conn *ct, const struct sk_buff *skb,
|
|
|
BUG_ON(th == NULL);
|
|
|
|
|
|
/* Don't need lock here: this conntrack not in circulation yet */
|
|
|
- new_state
|
|
|
- = tcp_conntracks[0][get_conntrack_index(th)]
|
|
|
- [TCP_CONNTRACK_NONE];
|
|
|
+ new_state = tcp_conntracks[0][get_conntrack_index(th)][TCP_CONNTRACK_NONE];
|
|
|
|
|
|
/* Invalid: delete conntrack */
|
|
|
if (new_state >= TCP_CONNTRACK_MAX) {
|
|
@@ -1077,6 +1075,7 @@ static bool tcp_new(struct nf_conn *ct, const struct sk_buff *skb,
|
|
|
}
|
|
|
|
|
|
if (new_state == TCP_CONNTRACK_SYN_SENT) {
|
|
|
+ memset(&ct->proto.tcp, 0, sizeof(ct->proto.tcp));
|
|
|
/* SYN packet */
|
|
|
ct->proto.tcp.seen[0].td_end =
|
|
|
segment_seq_plus_len(ntohl(th->seq), skb->len,
|
|
@@ -1088,11 +1087,11 @@ static bool tcp_new(struct nf_conn *ct, const struct sk_buff *skb,
|
|
|
ct->proto.tcp.seen[0].td_end;
|
|
|
|
|
|
tcp_options(skb, dataoff, th, &ct->proto.tcp.seen[0]);
|
|
|
- ct->proto.tcp.seen[1].flags = 0;
|
|
|
} else if (nf_ct_tcp_loose == 0) {
|
|
|
/* Don't try to pick up connections. */
|
|
|
return false;
|
|
|
} else {
|
|
|
+ memset(&ct->proto.tcp, 0, sizeof(ct->proto.tcp));
|
|
|
/*
|
|
|
* We are in the middle of a connection,
|
|
|
* its history is lost for us.
|
|
@@ -1107,7 +1106,6 @@ static bool tcp_new(struct nf_conn *ct, const struct sk_buff *skb,
|
|
|
ct->proto.tcp.seen[0].td_maxend =
|
|
|
ct->proto.tcp.seen[0].td_end +
|
|
|
ct->proto.tcp.seen[0].td_maxwin;
|
|
|
- ct->proto.tcp.seen[0].td_scale = 0;
|
|
|
|
|
|
/* We assume SACK and liberal window checking to handle
|
|
|
* window scaling */
|
|
@@ -1116,13 +1114,7 @@ static bool tcp_new(struct nf_conn *ct, const struct sk_buff *skb,
|
|
|
IP_CT_TCP_FLAG_BE_LIBERAL;
|
|
|
}
|
|
|
|
|
|
- ct->proto.tcp.seen[1].td_end = 0;
|
|
|
- ct->proto.tcp.seen[1].td_maxend = 0;
|
|
|
- ct->proto.tcp.seen[1].td_maxwin = 0;
|
|
|
- ct->proto.tcp.seen[1].td_scale = 0;
|
|
|
-
|
|
|
/* tcp_packet will set them */
|
|
|
- ct->proto.tcp.state = TCP_CONNTRACK_NONE;
|
|
|
ct->proto.tcp.last_index = TCP_NONE_SET;
|
|
|
|
|
|
pr_debug("tcp_new: sender end=%u maxend=%u maxwin=%u scale=%i "
|