OSDN Git Service

Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[uclinux-h8/linux.git] / net / ipv4 / tcp_ipv4.c
index fc1c658..d7d4c2b 100644 (file)
@@ -1400,7 +1400,7 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
                return 0;
        }
 
-       if (skb->len < tcp_hdrlen(skb) || tcp_checksum_complete(skb))
+       if (tcp_checksum_complete(skb))
                goto csum_err;
 
        if (sk->sk_state == TCP_LISTEN) {
@@ -1626,6 +1626,7 @@ process:
        skb->dev = NULL;
 
        bh_lock_sock_nested(sk);
+       tcp_sk(sk)->segs_in += max_t(u16, 1, skb_shinfo(skb)->gso_segs);
        ret = 0;
        if (!sock_owned_by_user(sk)) {
                if (!tcp_prequeue(sk, skb))
@@ -1646,7 +1647,7 @@ no_tcp_socket:
        if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb))
                goto discard_it;
 
-       if (skb->len < (th->doff << 2) || tcp_checksum_complete(skb)) {
+       if (tcp_checksum_complete(skb)) {
 csum_error:
                TCP_INC_STATS_BH(net, TCP_MIB_CSUMERRORS);
 bad_packet:
@@ -1670,10 +1671,6 @@ do_time_wait:
                goto discard_it;
        }
 
-       if (skb->len < (th->doff << 2)) {
-               inet_twsk_put(inet_twsk(sk));
-               goto bad_packet;
-       }
        if (tcp_checksum_complete(skb)) {
                inet_twsk_put(inet_twsk(sk));
                goto csum_error;
@@ -1802,6 +1799,7 @@ void tcp_v4_destroy_sock(struct sock *sk)
 
        /* If socket is aborted during connect operation */
        tcp_free_fastopen_req(tp);
+       tcp_saved_syn_free(tp);
 
        sk_sockets_allocated_dec(sk);
        sock_release_memcg(sk);
@@ -2410,12 +2408,15 @@ static int __net_init tcp_sk_init(struct net *net)
                        goto fail;
                *per_cpu_ptr(net->ipv4.tcp_sk, cpu) = sk;
        }
+
        net->ipv4.sysctl_tcp_ecn = 2;
+       net->ipv4.sysctl_tcp_ecn_fallback = 1;
+
        net->ipv4.sysctl_tcp_base_mss = TCP_BASE_MSS;
        net->ipv4.sysctl_tcp_probe_threshold = TCP_PROBE_THRESHOLD;
        net->ipv4.sysctl_tcp_probe_interval = TCP_PROBE_INTERVAL;
-       return 0;
 
+       return 0;
 fail:
        tcp_sk_exit(net);