On Thu, Dec 6, 2018 at 12:52 AM Luis Chamberlain <mcgrof@xxxxxxxxxx> wrote: > > On Thu, Dec 06, 2018 at 03:36:15PM +0800, Cheng Lin wrote: > > If the number of input parameters is less than the total > > parameters, an EINVAL error will be returned. > > > > e.g. > > We use proc_doulongvec_minmax to pass up to two parameters > > with kern_table. > > > > { > > .procname = "monitor_signals", > > .data = &monitor_sigs, > > .maxlen = 2*sizeof(unsigned long), > > .mode = 0644, > > .proc_handler = proc_doulongvec_minmax, > > }, > > > > Reproduce: > > When passing two parameters, it's work normal. But passing > > only one parameter, an error "Invalid argument"(EINVAL) is > > returned. > > > > [root@cl150 ~]# echo 1 2 > /proc/sys/kernel/monitor_signals > > [root@cl150 ~]# cat /proc/sys/kernel/monitor_signals > > 1 2 > > [root@cl150 ~]# echo 3 > /proc/sys/kernel/monitor_signals > > -bash: echo: write error: Invalid argument > > [root@cl150 ~]# echo $? > > 1 > > [root@cl150 ~]# cat /proc/sys/kernel/monitor_signals > > 3 2 > > [root@cl150 ~]# > > > > The following is the result after apply this patch. No error > > is returned when the number of input parameters is less than > > the total parameters. > > > > [root@cl150 ~]# echo 1 2 > /proc/sys/kernel/monitor_signals > > [root@cl150 ~]# cat /proc/sys/kernel/monitor_signals > > 1 2 > > [root@cl150 ~]# echo 3 > /proc/sys/kernel/monitor_signals > > [root@cl150 ~]# echo $? > > 0 > > [root@cl150 ~]# cat /proc/sys/kernel/monitor_signals > > 3 2 > > [root@cl150 ~]# > > > > There are three processing functions dealing with digital parameters, > > __do_proc_dointvec/__do_proc_douintvec/__do_proc_doulongvec_minmax. > > > > This patch deals with __do_proc_doulongvec_minmax, just as > > __do_proc_dointvec does, adding a check for parameters 'left'. In > > __do_proc_douintvec, its code implementation explicitly does not > > support multiple inputs. > > > > static int __do_proc_douintvec(...){ > > ... > > /* > > * Arrays are not supported, keep this simple. *Do not* add > > * support for them. > > */ > > if (vleft != 1) { > > *lenp = 0; > > return -EINVAL; > > } > > ... > > } > > > > So, just __do_proc_doulongvec_minmax has the problem. And most use of > > proc_doulongvec_minmax/proc_doulongvec_ms_jiffies_minmax just have one > > parameter. > > > > Signed-off-by: Cheng Lin <cheng.lin130@xxxxxxxxxx> > > Thanks for fixing up the commit log. > > Acked-by: Luis Chamberlain <mcgrof@xxxxxxxxxx> Reviewed-by: Kees Cook <keescook@xxxxxxxxxxxx> -Kees > > I think we can live with this outside of stable. So stable is not > needed. But I would not be surprised if autosel algorithm will end > up picking it up. And if so.. well, it cannot hurt. > > Luis -- Kees Cook