Skip to content
Snippets Groups Projects
Select Git revision
  • 00355fa5bb89840c48eb11eb6d84c6c3b128a839
  • vme-testing default
  • ci-test
  • master
  • remoteproc
  • am625-sk-ov5640
  • pcal6534-upstreaming
  • lps22df-upstreaming
  • msc-upstreaming
  • imx8mp
  • iio/noa1305
  • vme-next
  • vme-next-4.14-rc4
  • v4.14-rc4
  • v4.14-rc3
  • v4.14-rc2
  • v4.14-rc1
  • v4.13
  • vme-next-4.13-rc7
  • v4.13-rc7
  • v4.13-rc6
  • v4.13-rc5
  • v4.13-rc4
  • v4.13-rc3
  • v4.13-rc2
  • v4.13-rc1
  • v4.12
  • v4.12-rc7
  • v4.12-rc6
  • v4.12-rc5
  • v4.12-rc4
  • v4.12-rc3
32 results

tcp_ipv6.c

Blame
    • Alexey Kodanev's avatar
      00355fa5
      tcp: setup timestamp offset when write_seq already set · 00355fa5
      Alexey Kodanev authored
      
      Found that when randomized tcp offsets are enabled (by default)
      TCP client can still start new connections without them. Later,
      if server does active close and re-uses sockets in TIME-WAIT
      state, new SYN from client can be rejected on PAWS check inside
      tcp_timewait_state_process(), because either tw_ts_recent or
      rcv_tsval doesn't really have an offset set.
      
      Here is how to reproduce it with LTP netstress tool:
          netstress -R 1 &
          netstress -H 127.0.0.1 -lr 1000000 -a1
      
          [...]
          < S  seq 1956977072 win 43690 TS val 295618 ecr 459956970
          > .  ack 1956911535 win 342 TS val 459967184 ecr 1547117608
          < R  seq 1956911535 win 0 length 0
      +1. < S  seq 1956977072 win 43690 TS val 296640 ecr 459956970
          > S. seq 657450664 ack 1956977073 win 43690 TS val 459968205 ecr 296640
      
      Fixes: 95a22cae ("tcp: randomize tcp timestamp offsets for each connection")
      Signed-off-by: default avatarAlexey Kodanev <alexey.kodanev@oracle.com>
      Acked-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      00355fa5
      History
      tcp: setup timestamp offset when write_seq already set
      Alexey Kodanev authored
      
      Found that when randomized tcp offsets are enabled (by default)
      TCP client can still start new connections without them. Later,
      if server does active close and re-uses sockets in TIME-WAIT
      state, new SYN from client can be rejected on PAWS check inside
      tcp_timewait_state_process(), because either tw_ts_recent or
      rcv_tsval doesn't really have an offset set.
      
      Here is how to reproduce it with LTP netstress tool:
          netstress -R 1 &
          netstress -H 127.0.0.1 -lr 1000000 -a1
      
          [...]
          < S  seq 1956977072 win 43690 TS val 295618 ecr 459956970
          > .  ack 1956911535 win 342 TS val 459967184 ecr 1547117608
          < R  seq 1956911535 win 0 length 0
      +1. < S  seq 1956977072 win 43690 TS val 296640 ecr 459956970
          > S. seq 657450664 ack 1956977073 win 43690 TS val 459968205 ecr 296640
      
      Fixes: 95a22cae ("tcp: randomize tcp timestamp offsets for each connection")
      Signed-off-by: default avatarAlexey Kodanev <alexey.kodanev@oracle.com>
      Acked-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    tcp_ipv6.c 50.83 KiB
    /*
     *	TCP over IPv6
     *	Linux INET6 implementation
     *
     *	Authors:
     *	Pedro Roque		<roque@di.fc.ul.pt>
     *
     *	Based on:
     *	linux/net/ipv4/tcp.c
     *	linux/net/ipv4/tcp_input.c
     *	linux/net/ipv4/tcp_output.c
     *
     *	Fixes:
     *	Hideaki YOSHIFUJI	:	sin6_scope_id support
     *	YOSHIFUJI Hideaki @USAGI and:	Support IPV6_V6ONLY socket option, which
     *	Alexey Kuznetsov		allow both IPv4 and IPv6 sockets to bind
     *					a single port at the same time.
     *	YOSHIFUJI Hideaki @USAGI:	convert /proc/net/tcp6 to seq_file.
     *
     *	This program is free software; you can redistribute it and/or
     *      modify it under the terms of the GNU General Public License
     *      as published by the Free Software Foundation; either version
     *      2 of the License, or (at your option) any later version.
     */
    
    #include <linux/bottom_half.h>
    #include <linux/module.h>
    #include <linux/errno.h>
    #include <linux/types.h>
    #include <linux/socket.h>
    #include <linux/sockios.h>
    #include <linux/net.h>
    #include <linux/jiffies.h>
    #include <linux/in.h>
    #include <linux/in6.h>
    #include <linux/netdevice.h>
    #include <linux/init.h>
    #include <linux/jhash.h>
    #include <linux/ipsec.h>
    #include <linux/times.h>
    #include <linux/slab.h>
    #include <linux/uaccess.h>
    #include <linux/ipv6.h>
    #include <linux/icmpv6.h>
    #include <linux/random.h>
    
    #include <net/tcp.h>
    #include <net/ndisc.h>
    #include <net/inet6_hashtables.h>
    #include <net/inet6_connection_sock.h>
    #include <net/ipv6.h>
    #include <net/transp_v6.h>
    #include <net/addrconf.h>
    #include <net/ip6_route.h>
    #include <net/ip6_checksum.h>
    #include <net/inet_ecn.h>
    #include <net/protocol.h>
    #include <net/xfrm.h>
    #include <net/snmp.h>
    #include <net/dsfield.h>
    #include <net/timewait_sock.h>
    #include <net/inet_common.h>
    #include <net/secure_seq.h>
    #include <net/busy_poll.h>
    
    #include <linux/proc_fs.h>
    #include <linux/seq_file.h>
    
    #include <crypto/hash.h>
    #include <linux/scatterlist.h>