diff options
Diffstat (limited to 'net/ipv4/tcp_ipv4.c')
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index cf74c416831a..5d427f86b414 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -1226,27 +1226,19 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb) | |||
1226 | if (want_cookie && !tmp_opt.saw_tstamp) | 1226 | if (want_cookie && !tmp_opt.saw_tstamp) |
1227 | tcp_clear_options(&tmp_opt); | 1227 | tcp_clear_options(&tmp_opt); |
1228 | 1228 | ||
1229 | if (tmp_opt.saw_tstamp && !tmp_opt.rcv_tsval) { | ||
1230 | /* Some OSes (unknown ones, but I see them on web server, which | ||
1231 | * contains information interesting only for windows' | ||
1232 | * users) do not send their stamp in SYN. It is easy case. | ||
1233 | * We simply do not advertise TS support. | ||
1234 | */ | ||
1235 | tmp_opt.saw_tstamp = 0; | ||
1236 | tmp_opt.tstamp_ok = 0; | ||
1237 | } | ||
1238 | tmp_opt.tstamp_ok = tmp_opt.saw_tstamp; | 1229 | tmp_opt.tstamp_ok = tmp_opt.saw_tstamp; |
1239 | 1230 | ||
1240 | tcp_openreq_init(req, &tmp_opt, skb); | 1231 | tcp_openreq_init(req, &tmp_opt, skb); |
1241 | 1232 | ||
1242 | if (security_inet_conn_request(sk, skb, req)) | ||
1243 | goto drop_and_free; | ||
1244 | |||
1245 | ireq = inet_rsk(req); | 1233 | ireq = inet_rsk(req); |
1246 | ireq->loc_addr = daddr; | 1234 | ireq->loc_addr = daddr; |
1247 | ireq->rmt_addr = saddr; | 1235 | ireq->rmt_addr = saddr; |
1248 | ireq->no_srccheck = inet_sk(sk)->transparent; | 1236 | ireq->no_srccheck = inet_sk(sk)->transparent; |
1249 | ireq->opt = tcp_v4_save_options(sk, skb); | 1237 | ireq->opt = tcp_v4_save_options(sk, skb); |
1238 | |||
1239 | if (security_inet_conn_request(sk, skb, req)) | ||
1240 | goto drop_and_free; | ||
1241 | |||
1250 | if (!want_cookie) | 1242 | if (!want_cookie) |
1251 | TCP_ECN_create_request(req, tcp_hdr(skb)); | 1243 | TCP_ECN_create_request(req, tcp_hdr(skb)); |
1252 | 1244 | ||
@@ -2355,7 +2347,7 @@ struct sk_buff **tcp4_gro_receive(struct sk_buff **head, struct sk_buff *skb) | |||
2355 | 2347 | ||
2356 | switch (skb->ip_summed) { | 2348 | switch (skb->ip_summed) { |
2357 | case CHECKSUM_COMPLETE: | 2349 | case CHECKSUM_COMPLETE: |
2358 | if (!tcp_v4_check(skb->len, iph->saddr, iph->daddr, | 2350 | if (!tcp_v4_check(skb_gro_len(skb), iph->saddr, iph->daddr, |
2359 | skb->csum)) { | 2351 | skb->csum)) { |
2360 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 2352 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
2361 | break; | 2353 | break; |