diff mbox

[v2] sched: check user input value of sysctl_sched_time_avg

Message ID 20170904074931.oyhe4gz5jnhfmnw6@hirez.programming.kicks-ass.net (mailing list archive)
State New, archived
Headers show

Commit Message

Peter Zijlstra Sept. 4, 2017, 7:49 a.m. UTC
On Sat, Sep 02, 2017 at 02:57:32PM +0800, Ethan Zhao wrote:
> diff --git a/kernel/sysctl.c b/kernel/sysctl.c
> index 6648fbb..609bed2 100644
> --- a/kernel/sysctl.c
> +++ b/kernel/sysctl.c
> @@ -367,7 +367,7 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write,
>  		.data		= &sysctl_sched_time_avg,
>  		.maxlen		= sizeof(unsigned int),
>  		.mode		= 0644,
> -		.proc_handler	= proc_dointvec,
> +		.proc_handler	= sched_time_avg_handler,

*sigh*, what's wrong with the below? Too easy?

Comments

ethan zhao Sept. 4, 2017, 7:54 a.m. UTC | #1
Peter,


On 2017/9/4 15:49, Peter Zijlstra wrote:
> On Sat, Sep 02, 2017 at 02:57:32PM +0800, Ethan Zhao wrote:
>> diff --git a/kernel/sysctl.c b/kernel/sysctl.c
>> index 6648fbb..609bed2 100644
>> --- a/kernel/sysctl.c
>> +++ b/kernel/sysctl.c
>> @@ -367,7 +367,7 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write,
>>   		.data		= &sysctl_sched_time_avg,
>>   		.maxlen		= sizeof(unsigned int),
>>   		.mode		= 0644,
>> -		.proc_handler	= proc_dointvec,
>> +		.proc_handler	= sched_time_avg_handler,
> *sigh*, what's wrong with the below? Too easy?
  :),  seems I walked zigzag several cycles to get the right point.

  Thanks,
  Ethan
>
> diff --git a/kernel/sysctl.c b/kernel/sysctl.c
> index 6648fbbb8157..bbbc6a17c15e 100644
> --- a/kernel/sysctl.c
> +++ b/kernel/sysctl.c
> @@ -367,7 +367,8 @@ static struct ctl_table kern_table[] = {
>   		.data		= &sysctl_sched_time_avg,
>   		.maxlen		= sizeof(unsigned int),
>   		.mode		= 0644,
> -		.proc_handler	= proc_dointvec,
> +		.proc_handler	= proc_dointvec_min_max,
> +		.extra1		= &one,
>   	},
>   #ifdef CONFIG_SCHEDSTATS
>   	{
>
>
Luis Chamberlain Sept. 6, 2017, 7:50 p.m. UTC | #2
On Mon, Sep 04, 2017 at 03:54:23PM +0800, Ethan Zhao wrote:
> Peter,
> 
> 
> On 2017/9/4 15:49, Peter Zijlstra wrote:
> > On Sat, Sep 02, 2017 at 02:57:32PM +0800, Ethan Zhao wrote:
> > > diff --git a/kernel/sysctl.c b/kernel/sysctl.c
> > > index 6648fbb..609bed2 100644
> > > --- a/kernel/sysctl.c
> > > +++ b/kernel/sysctl.c
> > > @@ -367,7 +367,7 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write,
> > >   		.data		= &sysctl_sched_time_avg,
> > >   		.maxlen		= sizeof(unsigned int),
> > >   		.mode		= 0644,
> > > -		.proc_handler	= proc_dointvec,
> > > +		.proc_handler	= sched_time_avg_handler,
> > *sigh*, what's wrong with the below? Too easy?
>  :),  seems I walked zigzag several cycles to get the right point.

It sounds like negative values are not possible too, right? If so then
you can use proc_douintvec_minmax().

  Luis
ethan zhao Sept. 7, 2017, 4:21 a.m. UTC | #3
On 2017/9/7 3:50, Luis R. Rodriguez wrote:
> On Mon, Sep 04, 2017 at 03:54:23PM +0800, Ethan Zhao wrote:
>> Peter,
>>
>>
>> On 2017/9/4 15:49, Peter Zijlstra wrote:
>>> On Sat, Sep 02, 2017 at 02:57:32PM +0800, Ethan Zhao wrote:
>>>> diff --git a/kernel/sysctl.c b/kernel/sysctl.c
>>>> index 6648fbb..609bed2 100644
>>>> --- a/kernel/sysctl.c
>>>> +++ b/kernel/sysctl.c
>>>> @@ -367,7 +367,7 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write,
>>>>    		.data		= &sysctl_sched_time_avg,
>>>>    		.maxlen		= sizeof(unsigned int),
>>>>    		.mode		= 0644,
>>>> -		.proc_handler	= proc_dointvec,
>>>> +		.proc_handler	= sched_time_avg_handler,
>>> *sigh*, what's wrong with the below? Too easy?
>>   :),  seems I walked zigzag several cycles to get the right point.
> It sounds like negative values are not possible too, right? If so then
> you can use proc_douintvec_minmax().
  V4 has been sent days ago, please see v4.

  Thank,
  Ethan
>
>    Luis
>
diff mbox

Patch

diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 6648fbbb8157..bbbc6a17c15e 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -367,7 +367,8 @@  static struct ctl_table kern_table[] = {
 		.data		= &sysctl_sched_time_avg,
 		.maxlen		= sizeof(unsigned int),
 		.mode		= 0644,
-		.proc_handler	= proc_dointvec,
+		.proc_handler	= proc_dointvec_min_max,
+		.extra1		= &one,
 	},
 #ifdef CONFIG_SCHEDSTATS
 	{