diff options
| author | bingtian.ly@taobao.com <bingtian.ly@taobao.com> | 2013-01-23 20:35:28 +0000 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2013-01-28 23:15:27 -0500 | 
| commit | cdda88912d62f9603d27433338a18be83ef23ac1 (patch) | |
| tree | 5798502c9546bd3e8d20e2ac2d1ef01a8032b115 /net/core/sysctl_net_core.c | |
| parent | f7b5d1b9bd16e3ec71696abb204a8cfddd93aa62 (diff) | |
| download | olio-linux-3.10-cdda88912d62f9603d27433338a18be83ef23ac1.tar.xz olio-linux-3.10-cdda88912d62f9603d27433338a18be83ef23ac1.zip  | |
net: avoid to hang up on sending due to sysctl configuration overflow.
    I found if we write a larger than 4GB value to some sysctl
variables, the sending syscall will hang up forever, because these
variables are 32 bits, such large values make them overflow to 0 or
negative.
    This patch try to fix overflow or prevent from zero value setup
of below sysctl variables:
net.core.wmem_default
net.core.rmem_default
net.core.rmem_max
net.core.wmem_max
net.ipv4.udp_rmem_min
net.ipv4.udp_wmem_min
net.ipv4.tcp_wmem
net.ipv4.tcp_rmem
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Li Yu <raise.sail@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/sysctl_net_core.c')
| -rw-r--r-- | net/core/sysctl_net_core.c | 14 | 
1 files changed, 10 insertions, 4 deletions
diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c index d1b08045a9d..cfdb46ab3a7 100644 --- a/net/core/sysctl_net_core.c +++ b/net/core/sysctl_net_core.c @@ -20,6 +20,8 @@  #include <net/sock.h>  #include <net/net_ratelimit.h> +static int one = 1; +  #ifdef CONFIG_RPS  static int rps_sock_flow_sysctl(ctl_table *table, int write,  				void __user *buffer, size_t *lenp, loff_t *ppos) @@ -92,28 +94,32 @@ static struct ctl_table net_core_table[] = {  		.data		= &sysctl_wmem_max,  		.maxlen		= sizeof(int),  		.mode		= 0644, -		.proc_handler	= proc_dointvec +		.proc_handler	= proc_dointvec_minmax, +		.extra1		= &one,  	},  	{  		.procname	= "rmem_max",  		.data		= &sysctl_rmem_max,  		.maxlen		= sizeof(int),  		.mode		= 0644, -		.proc_handler	= proc_dointvec +		.proc_handler	= proc_dointvec_minmax, +		.extra1		= &one,  	},  	{  		.procname	= "wmem_default",  		.data		= &sysctl_wmem_default,  		.maxlen		= sizeof(int),  		.mode		= 0644, -		.proc_handler	= proc_dointvec +		.proc_handler	= proc_dointvec_minmax, +		.extra1		= &one,  	},  	{  		.procname	= "rmem_default",  		.data		= &sysctl_rmem_default,  		.maxlen		= sizeof(int),  		.mode		= 0644, -		.proc_handler	= proc_dointvec +		.proc_handler	= proc_dointvec_minmax, +		.extra1		= &one,  	},  	{  		.procname	= "dev_weight",  |