mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	net: move somaxconn init from sysctl code
The default value for somaxconn is set in sysctl_core_net_init(), but this
function is not called when kernel is configured without CONFIG_SYSCTL.
This results in the kernel not being able to accept TCP connections,
because the backlog has zero size. Usually, the user ends up with:
"TCP: request_sock_TCP: Possible SYN flooding on port 7. Dropping request.  Check SNMP counters."
If SYN cookies are not enabled the connection is rejected.
Before ef547f2ac1 (tcp: remove max_qlen_log), the effects were less
severe, because the backlog was always at least eight slots long.
Signed-off-by: Roman Kapl <roman.kapl@sysgo.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
			
			
This commit is contained in:
		
							parent
							
								
									65d786c21b
								
							
						
					
					
						commit
						7c3f1875c6
					
				
					 2 changed files with 19 additions and 2 deletions
				
			
		| 
						 | 
					@ -315,6 +315,25 @@ static __net_init int setup_net(struct net *net, struct user_namespace *user_ns)
 | 
				
			||||||
	goto out;
 | 
						goto out;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int __net_init net_defaults_init_net(struct net *net)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						net->core.sysctl_somaxconn = SOMAXCONN;
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct pernet_operations net_defaults_ops = {
 | 
				
			||||||
 | 
						.init = net_defaults_init_net,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static __init int net_defaults_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (register_pernet_subsys(&net_defaults_ops))
 | 
				
			||||||
 | 
							panic("Cannot initialize net default settings");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					core_initcall(net_defaults_init);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_NET_NS
 | 
					#ifdef CONFIG_NET_NS
 | 
				
			||||||
static struct ucounts *inc_net_namespaces(struct user_namespace *ns)
 | 
					static struct ucounts *inc_net_namespaces(struct user_namespace *ns)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -479,8 +479,6 @@ static __net_init int sysctl_core_net_init(struct net *net)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct ctl_table *tbl;
 | 
						struct ctl_table *tbl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	net->core.sysctl_somaxconn = SOMAXCONN;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	tbl = netns_core_table;
 | 
						tbl = netns_core_table;
 | 
				
			||||||
	if (!net_eq(net, &init_net)) {
 | 
						if (!net_eq(net, &init_net)) {
 | 
				
			||||||
		tbl = kmemdup(tbl, sizeof(netns_core_table), GFP_KERNEL);
 | 
							tbl = kmemdup(tbl, sizeof(netns_core_table), GFP_KERNEL);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue