Ilpo Järvinen
882bebaaca
[TCP]: tcp_simple_retransmit can cause S+L
...
This fixes Bugzilla #10384
tcp_simple_retransmit does L increment without any checking
whatsoever for overflowing S+L when Reno is in use.
The simplest scenario I can currently think of is rather
complex in practice (there might be some more straightforward
cases though). Ie., if mss is reduced during mtu probing, it
may end up marking everything lost and if some duplicate ACKs
arrived prior to that sacked_out will be non-zero as well,
leading to S+L > packets_out, tcp_clean_rtx_queue on the next
cumulative ACK or tcp_fastretrans_alert on the next duplicate
ACK will fix the S counter.
More straightforward (but questionable) solution would be to
just call tcp_reset_reno_sack() in tcp_simple_retransmit but
it would negatively impact the probe's retransmission, ie.,
the retransmissions would not occur if some duplicate ACKs
had arrived.
So I had to add reno sacked_out reseting to CA_Loss state
when the first cumulative ACK arrives (this stale sacked_out
might actually be the explanation for the reports of left_out
overflows in kernel prior to 2.6.23 and S+L overflow reports
of 2.6.24). However, this alone won't be enough to fix kernel
before 2.6.24 because it is building on top of the commit
1b6d427bb7 ([TCP]: Reduce sacked_out with reno when purging
write_queue) to keep the sacked_out from overflowing.
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
Reported-by: Alessandro Suardi <alessandro.suardi@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2008-04-07 22:33:07 -07:00
..
9p
9p: add support for sticky bit
2008-02-06 19:25:06 -06:00
bluetooth
bluetooth: Make hci_sock_cleanup() return void
2008-03-05 18:47:03 -08:00
irda
irda: replace __inline with inline
2008-03-05 18:37:16 -08:00
iucv
[AF_IUCV]: postpone receival of iucv-packets
2007-10-10 16:54:51 -07:00
netfilter
[NETFILTER]: nf_conntrack: replace horrible hack with ksize()
2008-03-10 16:43:41 -07:00
netns
[NETFILTER]: arp_tables: per-netns arp_tables FILTER
2008-01-31 19:27:41 -08:00
sctp
[SCTP]: Fix build warnings with IPV6 disabled.
2008-03-21 15:40:47 -07:00
tc_act
[PKT_SCHED]: Add stateless NAT
2007-10-10 16:53:11 -07:00
tipc
[TIPC]: Kill unused static inline (x5)
2008-02-07 18:17:13 -08:00
act_api.h
[NET_SCHED]: act_api: use PTR_ERR in tcf_action_init/tcf_action_get
2008-01-28 15:11:17 -08:00
addrconf.h
[IPV4]: Enable use of 240/4 address space.
2008-01-28 15:08:44 -08:00
af_rxrpc.h
af_unix.h
[AF_UNIX]: Remove unused declaration of sysctl_unix_max_dgram_qlen.
2008-01-28 14:57:13 -08:00
ah.h
[IPSEC]: Get rid of ipv6_{auth,esp,comp}_hdr
2007-10-10 16:55:55 -07:00
arp.h
[NETFILTER]: ebtables: remove casts, use consts
2008-01-31 19:27:33 -08:00
atmclip.h
ax25.h
[AX25] ax25_ds_timer: use mod_timer instead of add_timer
2008-02-12 17:53:34 -08:00
ax88796.h
ax88796: add 93cx6 eeprom support
2007-10-10 16:53:56 -07:00
cfg80211.h
cfg80211/nl80211: implement station attribute retrieval
2008-01-28 14:59:52 -08:00
checksum.h
[NET]: Move netfilter checksum helpers to net/core/utils.c
2008-01-28 14:55:14 -08:00
cipso_ipv4.h
compat.h
datalink.h
dn.h
[DECNET]: Another unnecessary net/tcp.h inclusion in net/dn.h
2007-07-10 23:02:12 -07:00
dn_dev.h
dn_fib.h
dn_neigh.h
dn_nsp.h
dn_route.h
[NET]: Wrap netdevice hardware header creation.
2007-10-10 16:52:50 -07:00
dsfield.h
[NET]: Constify include/net/dsfield.h
2008-01-28 14:55:58 -08:00
dst.h
[NET]: Fix tbench regression in 2.6.25-rc1
2008-03-12 22:52:37 -07:00
esp.h
[IPSEC]: Use crypto_aead and authenc in ESP
2008-01-31 19:27:02 -08:00
fib_rules.h
[NETNS]: Process FIB rule action in the context of the namespace.
2008-01-28 15:08:14 -08:00
flow.h
[IPV4]: Remove unused multipath cached routing defintion in net/flow.h
2008-01-28 15:00:20 -08:00
gen_stats.h
[NET_SCHED]: Convert packet schedulers from rtnetlink to new netlink API
2008-01-28 15:11:10 -08:00
genetlink.h
[GENETLINK]: Dynamic multicast groups.
2007-07-18 15:47:52 -07:00
icmp.h
[IPV4]: Add ICMPMsgStats MIB (RFC 4293)
2007-10-10 16:51:28 -07:00
ieee80211.h
ieee80211: fix misannotations
2008-01-28 15:08:48 -08:00
ieee80211_crypt.h
ieee80211_radiotap.h
[MAC80211]: Add get_unaligned to ieee80211_get_radiotap_len
2007-10-10 16:47:40 -07:00
ieee80211softmac.h
[IEEE80211]: Fix softmac lockdep reports.
2007-10-10 16:52:22 -07:00
ieee80211softmac_wx.h
if_inet6.h
[IPV6]: Reorg struct ifmcaddr6 to save some bytes
2008-02-03 04:28:54 -08:00
inet6_connection_sock.h
inet6_hashtables.h
[SOCK] proto: Add hashinfo member to struct proto
2008-02-03 04:28:52 -08:00
inet_common.h
[INET]: Remove leftover prototypes from include/net/inet_common.h
2007-11-12 21:02:51 -08:00
inet_connection_sock.h
[SOCK] proto: Add hashinfo member to struct proto
2008-02-03 04:28:52 -08:00
inet_ecn.h
[INET]: Give outer DSCP directly to ip*_copy_dscp
2008-01-28 14:53:45 -08:00
inet_frag.h
[NETNS][FRAGS]: Make the pernet subsystem for fragments.
2008-01-28 15:10:40 -08:00
inet_hashtables.h
[INET]: Fix accidentally broken inet(6)_hash_connect's port offset calculations.
2008-02-05 03:14:44 -08:00
inet_sock.h
[TCP]: Improve ipv4 established hash function.
2008-03-04 14:28:41 -08:00
inet_timewait_sock.h
[INET_TIMEWAIT_SOCK]: Reorganize struct inet_timewait_sock to save some bytes
2008-02-03 04:28:54 -08:00
inetpeer.h
[INET]: Use list_head-s in inetpeer.c
2007-11-12 21:27:28 -08:00
ip.h
[NETNS][FRAGS]: Make the mem counter per-namespace.
2008-01-28 15:10:36 -08:00
ip6_checksum.h
ip6_fib.h
[IPV6] Minor cleanup: remove unused definitions in net/ip6_fib.h
2008-02-07 18:11:49 -08:00
ip6_route.h
[IPV6] Minor clenup: remove two unused definitions in net/ip6_route.h
2008-02-07 18:10:19 -08:00
ip6_tunnel.h
[IP_TUNNEL]: Don't limit the number of tunnels with generic name explicitly.
2008-02-23 20:19:20 -08:00
ip_fib.h
[IPV4]: Fix compile error building without CONFIG_FS_PROC
2008-02-05 02:54:16 -08:00
ip_vs.h
[IPVS]: Switch to using ctl_paths.
2008-01-28 15:01:08 -08:00
ipcomp.h
[IPSEC]: Get rid of ipv6_{auth,esp,comp}_hdr
2007-10-10 16:55:55 -07:00
ipconfig.h
ipip.h
[IPV4]: Add ip_local_out
2008-01-28 14:53:47 -08:00
ipv6.h
[IPV6]: Fix sysctl compilation error.
2008-02-05 02:57:59 -08:00
ipx.h
iw_handler.h
[NL80211]: add netlink interface to cfg80211
2007-10-10 16:52:14 -07:00
lapb.h
llc.h
[LLC]: station source mac address
2008-03-28 16:28:36 -07:00
llc_c_ac.h
llc_c_ev.h
llc_c_st.h
llc_conn.h
[NET]: Make socket creation namespace safe.
2007-10-10 16:49:07 -07:00
llc_if.h
llc_pdu.h
[LLC]: skb allocation size for responses
2008-03-31 21:02:47 -07:00
llc_s_ac.h
llc_s_ev.h
llc_s_st.h
llc_sap.h
[LLC]: skb allocation size for responses
2008-03-31 21:02:47 -07:00
mac80211.h
mac80211: add unified BSS configuration
2008-01-28 15:09:43 -08:00
mip6.h
ndisc.h
[IPV6]: remove unused method declaration (net/ndisc.h).
2008-02-12 22:06:53 -08:00
neighbour.h
[NEIGH]: Fix race between pneigh deletion and ipv6's ndisc_recv_ns (v3).
2008-03-24 14:48:59 -07:00
net_namespace.h
[NET]: Make /proc/net a symlink on /proc/self/net (v3)
2008-03-07 11:08:40 -08:00
netdma.h
netevent.h
[NET]: Remove unnecessary inclusion of dst.h
2008-01-28 14:53:38 -08:00
netlabel.h
NetLabel: introduce a new kernel configuration API for NetLabel
2008-02-05 09:44:20 -08:00
netlink.h
[NETLINK]: Add nla_append()
2008-01-28 15:11:09 -08:00
netrom.h
nexthop.h
p8022.h
pkt_cls.h
[NET_SCHED]: Constify struct tcf_ext_map
2008-01-31 19:28:34 -08:00
pkt_sched.h
[NET_SCHED]: Convert packet schedulers from rtnetlink to new netlink API
2008-01-28 15:11:10 -08:00
protocol.h
[IPV6]: make inet6_register_protosw to return an error code
2008-01-28 14:57:12 -08:00
psnap.h
raw.h
[RAW]: Wrong content of the /proc/net/raw6.
2008-01-31 19:27:26 -08:00
rawv6.h
[IPv6] RAW: Compact the API for the kernel
2008-01-28 14:54:29 -08:00
red.h
request_sock.h
[INET]: Fix potential kfree on vmalloc-ed area of request_sock_queue
2007-11-15 02:57:06 -08:00
rose.h
[ROSE]: Fix rose.ko oops on unload
2007-10-07 23:44:17 -07:00
route.h
[IPV4] route cache: Introduce rt_genid for smooth cache invalidation
2008-01-31 19:28:27 -08:00
rtnetlink.h
[NET]: Make the device list and device lookups per namespace.
2007-10-10 16:49:10 -07:00
sch_generic.h
[NET_SCHED]: Convert classifiers from rtnetlink to new netlink API
2008-01-28 15:11:11 -08:00
scm.h
pid namespaces: changes to show virtual ids to user
2007-10-19 11:53:40 -07:00
slhc_vj.h
snmp.h
[XFRM]: Define packet dropping statistics.
2008-01-28 14:59:38 -08:00
sock.h
net: fix kernel-doc warnings in header files
2008-02-18 20:52:13 -08:00
syncppp.h
tcp.h
[TCP]: tcp_simple_retransmit can cause S+L
2008-04-07 22:33:07 -07:00
tcp_states.h
timewait_sock.h
transp_v6.h
[IPV6]: make the protocol initialization to return an error code
2008-01-28 14:57:13 -08:00
udp.h
[NET]: prot_inuse cleanups and optimizations
2008-01-28 15:00:36 -08:00
udplite.h
[UDP]: Restore missing inDatagrams increments
2008-01-28 14:56:33 -08:00
wext.h
[NET]: Make the device list and device lookups per namespace.
2007-10-10 16:49:10 -07:00
wireless.h
x25.h
x25device.h
xfrm.h
[IPSEC]: Fix BEET output
2008-03-26 16:51:09 -07:00