Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8e1f9b5 authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by David S. Miller
Browse files

[NET] sysctl: make sysctl_somaxconn per-namespace



Just move the variable on the struct net and adjust
its usage.

Others sysctls from sys.net.core table are more
difficult to virtualize (i.e. make them per-namespace),
but I'll look at them as well a bit later.

Signed-off-by: default avatarPavel Emelyanov <xemul@oenvz.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 790a3532
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ struct __kernel_sockaddr_storage {
#include <linux/types.h>		/* pid_t			*/
#include <linux/compiler.h>		/* __user			*/

extern int sysctl_somaxconn;
#ifdef CONFIG_PROC_FS
struct seq_file;
extern void socket_seq_show(struct seq_file *seq);
+1 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ struct net {

	/* core sysctls */
	struct ctl_table_header	*sysctl_core_hdr;
	int			sysctl_somaxconn;

	/* List of all packet sockets. */
	rwlock_t		packet_sklist_lock;
+3 −1
Original line number Diff line number Diff line
@@ -127,7 +127,7 @@ static struct ctl_table net_core_table[] = {
	{
		.ctl_name	= NET_CORE_SOMAXCONN,
		.procname	= "somaxconn",
		.data		= &sysctl_somaxconn,
		.data		= &init_net.sysctl_somaxconn,
		.maxlen		= sizeof(int),
		.mode		= 0644,
		.proc_handler	= &proc_dointvec
@@ -161,6 +161,8 @@ static __net_init int sysctl_core_net_init(struct net *net)
{
	struct ctl_table *tbl, *tmp;

	net->sysctl_somaxconn = SOMAXCONN;

	tbl = net_core_table;
	if (net != &init_net) {
		tbl = kmemdup(tbl, sizeof(net_core_table), GFP_KERNEL);
+4 −4
Original line number Diff line number Diff line
@@ -1365,17 +1365,17 @@ asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen)
 *	ready for listening.
 */

int sysctl_somaxconn __read_mostly = SOMAXCONN;

asmlinkage long sys_listen(int fd, int backlog)
{
	struct socket *sock;
	int err, fput_needed;
	int somaxconn;

	sock = sockfd_lookup_light(fd, &err, &fput_needed);
	if (sock) {
		if ((unsigned)backlog > sysctl_somaxconn)
			backlog = sysctl_somaxconn;
		somaxconn = sock->sk->sk_net->sysctl_somaxconn;
		if ((unsigned)backlog > somaxconn)
			backlog = somaxconn;

		err = security_socket_listen(sock, backlog);
		if (!err)