freebsd-skq/sys
Hans Petter Selasky 9febbc4541 Fix for natd(8) sending wrong sequence number after TCP retransmission,
terminating a TCP connection.

If a TCP packet must be retransmitted and the data length has changed in the
retransmitted packet, due to the internal workings of TCP, typically when ACK
packets are lost, then there is a 30% chance that the logic in GetDeltaSeqOut()
will find the correct length, which is the last length received.

This can be explained as follows:

If a "227 Entering Passive Mode" packet must be retransmittet and the length
changes from 51 to 50 bytes, for example, then we have three cases for the
list scan in GetDeltaSeqOut(), depending on how many prior packets were
received modulus N_LINK_TCP_DATA=3:

  case 1:  index 0:   original packet        51
           index 1:   retransmitted packet   50
           index 2:   not relevant

  case 2:  index 0:   not relevant
           index 1:   original packet        51
           index 2:   retransmitted packet   50

  case 3:  index 0:   retransmitted packet   50
           index 1:   not relevant
           index 2:   original packet        51

This patch simply changes the searching order for TCP packets, always starting
at the last received packet instead of any received packet, in
GetDeltaAckIn() and GetDeltaSeqOut().

Else no functional changes.

Discussed with:	rscheff@
Submitted by:	Andreas Longwitz <longwitz@incore.de>
PR:		230755
MFC after:	1 week
Sponsored by:	Mellanox Technologies // NVIDIA Networking
2021-02-22 17:13:58 +01:00
..
amd64 amd64: implement strlen in assembly, take 2 2021-02-21 00:43:05 +00:00
arm Remove __XSCALE__ checks from the arm code 2021-02-19 15:31:26 +00:00
arm64 arm64: Include NUMA locality info in the CPU topology 2021-02-18 10:51:38 -05:00
bsm Add aio_writev and aio_readv 2021-01-02 19:57:58 -07:00
cam Fix build after 2c7dc6bae9. 2021-02-21 17:21:14 -05:00
cddl Reimplement the arm64 dtrace_gethrtime(), which provides the 2021-02-19 09:00:39 +00:00
compat Use atomic loads/stores when updating td->td_state 2021-02-18 14:02:48 +00:00
conf Add missing entry for zfs_racct.c 2021-02-22 15:06:48 +01:00
contrib zfs: merge OpenZFS master-9312e0fd1 2021-02-22 13:01:17 +01:00
crypto OpenSSL: Regen assembly files for OpenSSL 1.1.1j 2021-02-17 00:35:11 -05:00
ddb Use atomic loads/stores when updating td->td_state 2021-02-18 14:02:48 +00:00
dev xen-blkback: fix leak of grant maps on ring setup failure 2021-02-22 16:47:52 +01:00
dts Remove DTS files for arm boards we don't support 2021-01-27 10:02:01 +00:00
fs ext2fs: clear write cluster tracking on truncation 2021-02-21 11:38:21 +02:00
gdb Use atomic loads/stores when updating td->td_state 2021-02-18 14:02:48 +00:00
geom opencrypto: Introduce crypto_dispatch_async() 2021-02-08 09:19:19 -05:00
gnu Remove the old dts imported tree. 2021-01-15 20:09:55 +01:00
i386 Add a VA_IS_CLEANMAP() macro. 2021-02-17 16:32:11 -08:00
isa
kern m_uiotombuf_nomap(): Stop clearing PG_ZERO in newly allocated pages 2021-02-22 10:04:46 -05:00
kgssapi opencrypto: Introduce crypto_dispatch_async() 2021-02-08 09:19:19 -05:00
libkern Restore the augmented strlen commentary 2021-02-08 19:15:21 +00:00
mips Add a VA_IS_CLEANMAP() macro. 2021-02-17 16:32:11 -08:00
modules zfs: merge OpenZFS master-9312e0fd1 2021-02-22 13:01:17 +01:00
net Fix setting static entries for arp/ndp. 2021-02-20 18:26:35 +00:00
net80211
netgraph netgraph/ng_bridge: Add counters for the first link, too 2021-02-10 19:05:37 +01:00
netinet Fix for natd(8) sending wrong sequence number after TCP retransmission, 2021-02-22 17:13:58 +01:00
netinet6 Remove per-packet ifa refcounting from IPv6 fast path. 2021-02-15 22:33:12 +00:00
netipsec Revert "SO_RERROR indicates that receive buffer overflows should be handled as errors." 2021-02-08 22:32:32 +00:00
netpfil pf: Fix osfp configuration 2021-02-18 08:38:28 +01:00
netsmb
nfs
nfsclient
nfsserver
nlm
ofed kern: net: remove TCP_LINGERTIME 2021-02-18 22:36:01 -06:00
opencrypto cryptosoft: Support per-op keys for AES-GCM and AES-CCM. 2021-02-18 09:53:25 -08:00
powerpc Add a VA_IS_CLEANMAP() macro. 2021-02-17 16:32:11 -08:00
riscv Add a VA_IS_CLEANMAP() macro. 2021-02-17 16:32:11 -08:00
rpc nfs-over-tls: handle res.gid.gid_val correctly for memory allocation 2021-01-12 13:59:52 -08:00
security Convert remaining cap_rights_init users to cap_rights_init_one 2021-01-12 13:16:10 +00:00
sys jail: Add pr_state to struct prison 2021-02-21 13:24:47 -08:00
teken loader: implement framebuffer console 2021-01-02 21:41:36 +02:00
tests Enable running fib tests inside vnet jail. 2021-01-17 20:32:26 +00:00
tools syscalls.master: Add a new syscall type: RESERVED 2021-01-26 18:27:44 +00:00
ufs vnode: move write cluster support data to inodes. 2021-02-21 11:38:21 +02:00
vm Use atomic loads/stores when updating td->td_state 2021-02-18 14:02:48 +00:00
x86 xen/boot: allow specifying boot method when booted from Xen 2021-02-16 15:26:11 +01:00
xdr
xen xen: remove .swp file from public headers 2021-01-11 18:14:11 +01:00
Makefile