|
@@ -161,13 +161,12 @@ static __u16 const msstab[] = {
|
|
*/
|
|
*/
|
|
__u32 cookie_v4_init_sequence(struct sock *sk, struct sk_buff *skb, __u16 *mssp)
|
|
__u32 cookie_v4_init_sequence(struct sock *sk, struct sk_buff *skb, __u16 *mssp)
|
|
{
|
|
{
|
|
- struct tcp_sock *tp = tcp_sk(sk);
|
|
|
|
const struct iphdr *iph = ip_hdr(skb);
|
|
const struct iphdr *iph = ip_hdr(skb);
|
|
const struct tcphdr *th = tcp_hdr(skb);
|
|
const struct tcphdr *th = tcp_hdr(skb);
|
|
int mssind;
|
|
int mssind;
|
|
const __u16 mss = *mssp;
|
|
const __u16 mss = *mssp;
|
|
|
|
|
|
- tp->last_synq_overflow = jiffies;
|
|
|
|
|
|
+ tcp_synq_overflow(sk);
|
|
|
|
|
|
/* XXX sort msstab[] by probability? Binary search? */
|
|
/* XXX sort msstab[] by probability? Binary search? */
|
|
for (mssind = 0; mss > msstab[mssind + 1]; mssind++)
|
|
for (mssind = 0; mss > msstab[mssind + 1]; mssind++)
|
|
@@ -268,7 +267,7 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb,
|
|
if (!sysctl_tcp_syncookies || !th->ack)
|
|
if (!sysctl_tcp_syncookies || !th->ack)
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
- if (time_after(jiffies, tp->last_synq_overflow + TCP_TIMEOUT_INIT) ||
|
|
|
|
|
|
+ if (tcp_synq_no_recent_overflow(sk) ||
|
|
(mss = cookie_check(skb, cookie)) == 0) {
|
|
(mss = cookie_check(skb, cookie)) == 0) {
|
|
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_SYNCOOKIESFAILED);
|
|
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_SYNCOOKIESFAILED);
|
|
goto out;
|
|
goto out;
|