diff options
Diffstat (limited to 'kernel/sysctl.c')
| -rw-r--r-- | kernel/sysctl.c | 50 | 
1 files changed, 16 insertions, 34 deletions
| diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 188c305aeb8b..137d4abe3eda 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -267,13 +267,14 @@ int proc_dostring(struct ctl_table *table, int write,  			ppos);  } -static size_t proc_skip_spaces(char **buf) +static void proc_skip_spaces(char **buf, size_t *size)  { -	size_t ret; -	char *tmp = skip_spaces(*buf); -	ret = tmp - *buf; -	*buf = tmp; -	return ret; +	while (*size) { +		if (!isspace(**buf)) +			break; +		(*size)--; +		(*buf)++; +	}  }  static void proc_skip_char(char **buf, size_t *size, const char v) @@ -342,13 +343,12 @@ static int proc_get_long(char **buf, size_t *size,  			  unsigned long *val, bool *neg,  			  const char *perm_tr, unsigned perm_tr_len, char *tr)  { -	int len;  	char *p, tmp[TMPBUFLEN]; +	ssize_t len = *size; -	if (!*size) +	if (len <= 0)  		return -EINVAL; -	len = *size;  	if (len > TMPBUFLEN - 1)  		len = TMPBUFLEN - 1; @@ -521,7 +521,7 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table,  		bool neg;  		if (write) { -			left -= proc_skip_spaces(&p); +			proc_skip_spaces(&p, &left);  			if (!left)  				break; @@ -548,7 +548,7 @@ static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table,  	if (!write && !first && left && !err)  		proc_put_char(&buffer, &left, '\n');  	if (write && !err && left) -		left -= proc_skip_spaces(&p); +		proc_skip_spaces(&p, &left);  	if (write && first)  		return err ? : -EINVAL;  	*lenp -= left; @@ -590,7 +590,7 @@ static int do_proc_douintvec_w(unsigned int *tbl_data,  	if (left > PAGE_SIZE - 1)  		left = PAGE_SIZE - 1; -	left -= proc_skip_spaces(&p); +	proc_skip_spaces(&p, &left);  	if (!left) {  		err = -EINVAL;  		goto out_free; @@ -610,7 +610,7 @@ static int do_proc_douintvec_w(unsigned int *tbl_data,  	}  	if (!err && left) -		left -= proc_skip_spaces(&p); +		proc_skip_spaces(&p, &left);  out_free:  	if (err) @@ -1075,7 +1075,7 @@ static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table,  		if (write) {  			bool neg; -			left -= proc_skip_spaces(&p); +			proc_skip_spaces(&p, &left);  			if (!left)  				break; @@ -1104,7 +1104,7 @@ static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table,  	if (!write && !first && left && !err)  		proc_put_char(&buffer, &left, '\n');  	if (write && !err) -		left -= proc_skip_spaces(&p); +		proc_skip_spaces(&p, &left);  	if (write && first)  		return err ? : -EINVAL;  	*lenp -= left; @@ -1633,25 +1633,6 @@ int proc_do_static_key(struct ctl_table *table, int write,  }  static struct ctl_table kern_table[] = { -#ifdef CONFIG_NUMA_BALANCING -	{ -		.procname	= "numa_balancing", -		.data		= NULL, /* filled in by handler */ -		.maxlen		= sizeof(unsigned int), -		.mode		= 0644, -		.proc_handler	= sysctl_numa_balancing, -		.extra1		= SYSCTL_ZERO, -		.extra2		= SYSCTL_FOUR, -	}, -	{ -		.procname	= "numa_balancing_promote_rate_limit_MBps", -		.data		= &sysctl_numa_balancing_promote_rate_limit, -		.maxlen		= sizeof(unsigned int), -		.mode		= 0644, -		.proc_handler	= proc_dointvec_minmax, -		.extra1		= SYSCTL_ZERO, -	}, -#endif /* CONFIG_NUMA_BALANCING */  	{  		.procname	= "panic",  		.data		= &panic_timeout, @@ -2125,6 +2106,7 @@ static struct ctl_table vm_table[] = {  		.mode		= 0644,  		.proc_handler	= proc_dointvec_minmax,  		.extra1		= SYSCTL_ZERO, +		.extra2		= (void *)&page_cluster_max,  	},  	{  		.procname	= "dirtytime_expire_seconds", |