linux-uconsole/net/ipv4
Eric Dumazet bc9f0ea1c7 tcp: avoid looping in tcp_send_fin()
[ Upstream commit 845704a535 ]

Presence of an unbound loop in tcp_send_fin() had always been hard
to explain when analyzing crash dumps involving gigantic dying processes
with millions of sockets.

Lets try a different strategy :

In case of memory pressure, try to add the FIN flag to last packet
in write queue, even if packet was already sent. TCP stack will
be able to deliver this FIN after a timeout event. Note that this
FIN being delivered by a retransmit, it also carries a Push flag
given our current implementation.

By checking sk_under_memory_pressure(), we anticipate that cooking
many FIN packets might deplete tcp memory.

In the case we could not allocate a packet, even with __GFP_WAIT
allocation, then not sending a FIN seems quite reasonable if it allows
to get rid of this socket, free memory, and not block the process from
eventually doing other useful work.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-05-06 21:56:20 +02:00
..
netfilter netfilter: ipt_ULOG: fix info leaks 2014-07-06 18:54:15 -07:00
af_inet.c net: net_secret should not depend on TCP 2013-10-13 16:08:30 -07:00
ah4.c net: Add skb_unclone() helper function. 2013-02-15 15:10:37 -05:00
arp.c firewire net, ipv4 arp: Extend hardware address and remove driver-level packet inspection. 2013-03-26 12:32:13 -04:00
cipso_ipv4.c cipso: don't follow a NULL pointer when setsockopt() is called 2012-07-18 09:01:12 -07:00
datagram.c ipv4: fix a race in ip4_datagram_release_cb() 2014-06-26 15:12:38 -04:00
devinet.c ipv4: Fix runtime WARNING in rtmsg_ifa() 2014-03-06 21:30:03 -08:00
esp4.c esp4: fix error return code in esp_output() 2013-04-15 14:05:34 -04:00
fib_frontend.c fib_frontend: fix possible NULL pointer dereference 2014-02-06 11:08:16 -08:00
fib_lookup.h
fib_rules.c ipv4: Fix incorrect error code when adding an unreachable route 2014-12-06 15:05:46 -08:00
fib_semantics.c ipv4: fix nexthop attlen check in fib_nh_match 2014-11-14 08:47:53 -08:00
fib_trie.c fib_trie: remove potential out of bound access 2013-09-14 06:54:54 -07:00
gre.c gre: fix a possible skb leak 2013-06-25 16:07:44 -07:00
icmp.c ipv4: icmp: Fix pMTU handling for rare case 2014-07-28 08:00:04 -07:00
igmp.c inetpeer: get rid of ip_id_count 2014-08-14 09:24:15 +08:00
inet_connection_sock.c tcp: Remove TCPCT 2013-03-17 14:35:13 -04:00
inet_diag.c inet_diag: fix possible overflow in inet_diag_dump_one_icsk() 2015-03-26 15:00:55 +01:00
inet_fragment.c inet: frag: make sure forced eviction removes all frags 2014-04-14 06:42:15 -07:00
inet_hashtables.c net: do not call sock_put() on TIMEWAIT sockets 2013-11-04 04:31:00 -08:00
inet_lro.c ipv4: replace ip_fast_csum with csum_replace2 2013-03-15 09:12:25 -04:00
inet_timewait_sock.c hlist: drop the node parameter from iterators 2013-02-27 19:10:24 -08:00
inetpeer.c inetpeer: get rid of ip_id_count 2014-08-14 09:24:15 +08:00
ip_forward.c ip_forward: Drop frames with attached skb->sk 2015-05-06 21:56:20 +02:00
ip_fragment.c ipv4: ip_check_defrag should not assume that skb_network_offset is zero 2015-03-18 13:22:26 +01:00
ip_gre.c gre: don't allow to add the same tunnel twice 2014-05-30 21:52:14 -07:00
ip_input.c net: Fix memory leak if TPROXY used with TCP early demux 2014-02-06 11:08:17 -08:00
ip_options.c ipv4: fix buffer overflow in ip_options_compile() 2014-07-28 08:00:06 -07:00
ip_output.c udp: only allow UFO for packets from SOCK_DGRAM sockets 2015-03-18 13:22:27 +01:00
ip_sockglue.c ip: zero sockaddr returned on error queue 2015-02-26 17:48:47 -08:00
ip_tunnel.c inetpeer: get rid of ip_id_count 2014-08-14 09:24:15 +08:00
ip_vti.c vti: don't allow to add the same tunnel twice 2014-05-30 21:52:15 -07:00
ipcomp.c xfrm: allow to avoid copying DSCP during encapsulation 2013-03-06 07:02:45 +01:00
ipconfig.c ipconfig: add informative timeout messages while waiting for carrier 2013-04-02 14:35:33 -04:00
ipip.c ipip, sit: fix ipv4_{update_pmtu,redirect} calls 2014-06-26 15:12:38 -04:00
ipmr.c inetpeer: get rid of ip_id_count 2014-08-14 09:24:15 +08:00
Kconfig Tunneling: use IP Tunnel stats APIs. 2013-03-26 12:27:19 -04:00
Makefile GRE: Refactor GRE tunneling code. 2013-03-26 12:27:18 -04:00
netfilter.c netfilter: add my copyright statements 2013-04-18 20:27:55 +02:00
ping.c ping: Fix race in free in receive path 2015-02-26 17:48:48 -08:00
proc.c net: Add MIB counters for checksum errors 2013-04-29 15:14:03 -04:00
protocol.c ipv4: Disallow non-namespace aware protocols to register. 2013-02-05 14:42:23 -05:00
raw.c inetpeer: get rid of ip_id_count 2014-08-14 09:24:15 +08:00
route.c ipv4: try to cache dst_entries which would cause a redirect 2015-02-26 17:48:48 -08:00
syncookies.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-04-22 20:32:51 -04:00
sysctl_net_ipv4.c tcp: TSO packets automatic sizing 2013-11-04 04:30:59 -08:00
tcp.c tcp: Fix divide by zero when pushing during tcp-repair 2014-07-28 08:00:04 -07:00
tcp_bic.c tcp: fix undo after RTO for BIC 2012-01-20 14:17:26 -05:00
tcp_cong.c tcp: remove Appropriate Byte Count support 2013-02-05 14:51:16 -05:00
tcp_cubic.c tcp_cubic: fix the range of delayed_ack 2014-05-30 21:52:16 -07:00
tcp_diag.c inet_diag: Rename inet_diag_req into inet_diag_req_v2 2012-01-11 12:56:06 -08:00
tcp_fastopen.c tcp: TCP Fast Open Server - header & support functions 2012-08-31 20:02:18 -04:00
tcp_highspeed.c
tcp_htcp.c
tcp_hybla.c tcp: bool conversions 2012-05-17 14:59:59 -04:00
tcp_illinois.c remove extra definitions of U32_MAX 2015-04-29 10:33:54 +02:00
tcp_input.c tcp: fix FRTO undo on cumulative ACK of SACKed range 2015-04-29 10:33:55 +02:00
tcp_ipv4.c tcp: prevent fetching dst twice in early demux code 2015-04-29 10:33:54 +02:00
tcp_lp.c
tcp_memcontrol.c net: tcp_memcontrol: minor: remove unused variable 2013-04-14 15:41:49 -04:00
tcp_metrics.c tcp: metrics: Avoid duplicate entries with the same destination-IP 2014-02-06 11:08:16 -08:00
tcp_minisocks.c tcp: reset timer after any SYNACK retransmit 2013-04-29 15:14:03 -04:00
tcp_output.c tcp: avoid looping in tcp_send_fin() 2015-05-06 21:56:20 +02:00
tcp_probe.c net: proc: change proc_net_remove to remove_proc_entry 2013-02-18 14:53:08 -05:00
tcp_scalable.c
tcp_timer.c tcp: refactor F-RTO 2013-03-21 11:47:50 -04:00
tcp_vegas.c tcp: Fix integer-overflow in TCP vegas 2014-08-14 09:24:15 +08:00
tcp_vegas.h
tcp_veno.c tcp: Fix integer-overflows in TCP veno 2014-08-14 09:24:15 +08:00
tcp_westwood.c tcp: refactor F-RTO 2013-03-21 11:47:50 -04:00
tcp_yeah.c
tunnel4.c net: Convert printks to pr_<level> 2012-03-11 23:42:51 -07:00
udp.c Revert "net: update consumers of MSG_MORE to recognize MSG_SENDPAGE_NOTLAST" 2013-12-20 07:45:12 -08:00
udp_diag.c udp_diag: Fix socket skipping within chain 2015-02-26 17:48:48 -08:00
udp_impl.h ipv4: fix checkpatch errors 2012-04-15 12:37:19 -04:00
udplite.c net: ipv4: Standardize prefixes for message logging 2012-03-12 17:05:21 -07:00
xfrm4_input.c net: Add skb_unclone() helper function. 2013-02-15 15:10:37 -05:00
xfrm4_mode_beet.c ipsec: be careful of non existing mac headers 2012-02-23 16:50:45 -05:00
xfrm4_mode_transport.c
xfrm4_mode_tunnel.c inetpeer: get rid of ip_id_count 2014-08-14 09:24:15 +08:00
xfrm4_output.c
xfrm4_policy.c xfrm: make gc_thresh configurable in all namespaces 2013-02-06 11:36:29 +01:00
xfrm4_state.c net: Add export.h for EXPORT_SYMBOL/THIS_MODULE to non-modules 2011-10-31 19:30:30 -04:00
xfrm4_tunnel.c net: ipv4: Standardize prefixes for message logging 2012-03-12 17:05:21 -07:00