aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/net_namespace.h6
-rw-r--r--include/net/netns/core.h13
-rw-r--r--net/core/sysctl_net_core.c12
-rw-r--r--net/socket.c2
4 files changed, 22 insertions, 11 deletions
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h
index f8f3d1a5fc35..c01d45fe08c3 100644
--- a/include/net/net_namespace.h
+++ b/include/net/net_namespace.h
@@ -8,6 +8,7 @@
8#include <linux/workqueue.h> 8#include <linux/workqueue.h>
9#include <linux/list.h> 9#include <linux/list.h>
10 10
11#include <net/netns/core.h>
11#include <net/netns/unix.h> 12#include <net/netns/unix.h>
12#include <net/netns/packet.h> 13#include <net/netns/packet.h>
13#include <net/netns/ipv4.h> 14#include <net/netns/ipv4.h>
@@ -46,10 +47,7 @@ struct net {
46 47
47 struct sock *rtnl; /* rtnetlink socket */ 48 struct sock *rtnl; /* rtnetlink socket */
48 49
49 /* core sysctls */ 50 struct netns_core core;
50 struct ctl_table_header *sysctl_core_hdr;
51 int sysctl_somaxconn;
52
53 struct netns_packet packet; 51 struct netns_packet packet;
54 struct netns_unix unx; 52 struct netns_unix unx;
55 struct netns_ipv4 ipv4; 53 struct netns_ipv4 ipv4;
diff --git a/include/net/netns/core.h b/include/net/netns/core.h
new file mode 100644
index 000000000000..0e8c0f8435d4
--- /dev/null
+++ b/include/net/netns/core.h
@@ -0,0 +1,13 @@
1#ifndef __NETNS_CORE_H__
2#define __NETNS_CORE_H__
3
4struct ctl_table_header;
5
6struct netns_core {
7 /* core sysctls */
8 struct ctl_table_header *sysctl_hdr;
9
10 int sysctl_somaxconn;
11};
12
13#endif
diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
index 130338f83ae5..5fc801057244 100644
--- a/net/core/sysctl_net_core.c
+++ b/net/core/sysctl_net_core.c
@@ -127,7 +127,7 @@ static struct ctl_table net_core_table[] = {
127 { 127 {
128 .ctl_name = NET_CORE_SOMAXCONN, 128 .ctl_name = NET_CORE_SOMAXCONN,
129 .procname = "somaxconn", 129 .procname = "somaxconn",
130 .data = &init_net.sysctl_somaxconn, 130 .data = &init_net.core.sysctl_somaxconn,
131 .maxlen = sizeof(int), 131 .maxlen = sizeof(int),
132 .mode = 0644, 132 .mode = 0644,
133 .proc_handler = &proc_dointvec 133 .proc_handler = &proc_dointvec
@@ -161,7 +161,7 @@ static __net_init int sysctl_core_net_init(struct net *net)
161{ 161{
162 struct ctl_table *tbl, *tmp; 162 struct ctl_table *tbl, *tmp;
163 163
164 net->sysctl_somaxconn = SOMAXCONN; 164 net->core.sysctl_somaxconn = SOMAXCONN;
165 165
166 tbl = net_core_table; 166 tbl = net_core_table;
167 if (net != &init_net) { 167 if (net != &init_net) {
@@ -178,9 +178,9 @@ static __net_init int sysctl_core_net_init(struct net *net)
178 } 178 }
179 } 179 }
180 180
181 net->sysctl_core_hdr = register_net_sysctl_table(net, 181 net->core.sysctl_hdr = register_net_sysctl_table(net,
182 net_core_path, tbl); 182 net_core_path, tbl);
183 if (net->sysctl_core_hdr == NULL) 183 if (net->core.sysctl_hdr == NULL)
184 goto err_reg; 184 goto err_reg;
185 185
186 return 0; 186 return 0;
@@ -196,8 +196,8 @@ static __net_exit void sysctl_core_net_exit(struct net *net)
196{ 196{
197 struct ctl_table *tbl; 197 struct ctl_table *tbl;
198 198
199 tbl = net->sysctl_core_hdr->ctl_table_arg; 199 tbl = net->core.sysctl_hdr->ctl_table_arg;
200 unregister_net_sysctl_table(net->sysctl_core_hdr); 200 unregister_net_sysctl_table(net->core.sysctl_hdr);
201 BUG_ON(tbl == net_core_table); 201 BUG_ON(tbl == net_core_table);
202 kfree(tbl); 202 kfree(tbl);
203} 203}
diff --git a/net/socket.c b/net/socket.c
index 79e5382fd110..9b5c917f8a6b 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -1375,7 +1375,7 @@ asmlinkage long sys_listen(int fd, int backlog)
1375 1375
1376 sock = sockfd_lookup_light(fd, &err, &fput_needed); 1376 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1377 if (sock) { 1377 if (sock) {
1378 somaxconn = sock_net(sock->sk)->sysctl_somaxconn; 1378 somaxconn = sock_net(sock->sk)->core.sysctl_somaxconn;
1379 if ((unsigned)backlog > somaxconn) 1379 if ((unsigned)backlog > somaxconn)
1380 backlog = somaxconn; 1380 backlog = somaxconn;
1381 1381