sched/fair: Null terminate buffer when updating tunable_scaling
PATCH 1/1 sched/fair: Null terminate buffer when updating tunable_scaling
This patch null-terminates the temporary buffer in sched_scaling_write() so kstrtouint() does not return failure and checks the value is valid.
Before
$ cat /sys/kernel/debug/sched/tunable_scaling 1 $ echo 0 > /sys/kernel/debug/sched/tunable_scaling -bash: echo: write error: Invalid argument $ cat /sys/kernel/debug/sched/tunable_scaling 1
After
$ cat /sys/kernel/debug/sched/tunable_scaling 1 $ echo 0 > /sys/kernel/debug/sched/tunable_scaling $ cat /sys/kernel/debug/sched/tunable_scaling 0 $ echo 3 > /sys/kernel/debug/sched/tunable_scaling -bash: echo: write error: Invalid argument
Fixes 8a99b6833c88 ("sched: Move SCHED_DEBUG sysctl to debugfs")
Signed-off-by Mel Gorman <[email protected]>
--- kernel/sched/debug.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
kernel/sched/debug.c +7 -1
@@ -173,16 +173,22 @@ static ssize_t sched_scaling_write(struct file *filp, const char __user *ubuf, size_t cnt, loff_t *ppos) { char buf[16]; +unsigned int scaling;if (cnt >15 ) cnt =15 ;if (copy_from_user (&buf, ubuf, cnt))return -EFAULT ; + buf[cnt] ='\0' ; -if (kstrtouint (buf,10 , &sysctl_sched_tunable_scaling)) +if (kstrtouint (buf,10 , &scaling))return -EINVAL ; +if (scaling >=SCHED_TUNABLESCALING_END ) +return -EINVAL ; + + sysctl_sched_tunable_scaling = scaling;if (sched_update_scaling ())return -EINVAL ;
Quoted 21 lines · Mel Gorman
This patch null-terminates the temporary buffer in
sched_scaling_write()sokstrtouint()does not return failure and checks the value is valid.Before
$ cat /sys/kernel/debug/sched/tunable_scaling 1 $ echo 0 > /sys/kernel/debug/sched/tunable_scaling -bash: echo: write error: Invalid argument $ cat /sys/kernel/debug/sched/tunable_scaling 1After
$ cat /sys/kernel/debug/sched/tunable_scaling 1 $ echo 0 > /sys/kernel/debug/sched/tunable_scaling $ cat /sys/kernel/debug/sched/tunable_scaling 0 $ echo 3 > /sys/kernel/debug/sched/tunable_scaling -bash: echo: write error: Invalid argument
Quoted 2 lines
Fixes 8a99b6833c88 ("sched: Move SCHED_DEBUG sysctl to debugfs")Signed-off-by Mel Gorman <[email protected]>
Acked-by Vincent Guittot <[email protected]>
Quoted 32 lines
--- kernel/sched/debug.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)kernel/sched/debug.c +7
-1@@ -173,16 +173,22 @@ static ssize_t sched_scaling_write(struct file *filp, const char __user *ubuf, size_t cnt, loff_t *ppos) { char buf[16]; +unsigned int scaling;if (cnt >15 ) cnt =15 ;if (copy_from_user (&buf, ubuf, cnt))return -EFAULT ; + buf[cnt] ='\0' ; -if (kstrtouint (buf,10 , &sysctl_sched_tunable_scaling)) +if (kstrtouint (buf,10 , &scaling))return -EINVAL ; +if (scaling >=SCHED_TUNABLESCALING_END ) +return -EINVAL ; + + sysctl_sched_tunable_scaling = scaling;if (sched_update_scaling ())return -EINVAL ;
The following commit has been merged into the sched/urgent branch of tip:
The following commit has been merged into the sched/urgent branch of tip:
Commit-ID: 703066188f63d66cc6b9d678e5b5ef1213c5938e Gitweb: https://git.kernel.org/tip/703066188f63d66cc6b9d678e5b5ef1213c5938e Author: Mel Gorman <[email protected]> AuthorDate: Mon, 27 Sep 2021 12:46:35 +01:00 Committer: Peter Zijlstra <[email protected]> CommitterDate: Fri, 01 Oct 2021 13:57:57 +02:00
sched/fair: Null terminate buffer when updating tunable_scaling
This patch null-terminates the temporary buffer in sched_scaling_write() so kstrtouint() does not return failure and checks the value is valid.
Before:
$ cat /sys/kernel/debug/sched/tunable_scaling 1 $ echo 0 > /sys/kernel/debug/sched/tunable_scaling -bash: echo: write error: Invalid argument $ cat /sys/kernel/debug/sched/tunable_scaling 1
After:
$ cat /sys/kernel/debug/sched/tunable_scaling 1 $ echo 0 > /sys/kernel/debug/sched/tunable_scaling $ cat /sys/kernel/debug/sched/tunable_scaling 0 $ echo 3 > /sys/kernel/debug/sched/tunable_scaling -bash: echo: write error: Invalid argument
Fixes 8a99b6833c88 ("sched: Move SCHED_DEBUG sysctl to debugfs")
Signed-off-by Mel Gorman <[email protected]>
Signed-off-by Peter Zijlstra (Intel) <[email protected]>
Acked-by Vincent Guittot <[email protected]>
--- kernel/sched/debug.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
kernel/sched/debug.c +7 -1
@@ -173,16 +173,22 @@ static ssize_t sched_scaling_write(struct file *filp, const char __user *ubuf, size_t cnt, loff_t *ppos) { char buf[16]; +unsigned int scaling;if (cnt >15 ) cnt =15 ;if (copy_from_user (&buf, ubuf, cnt))return -EFAULT ; + buf[cnt] ='\0' ; -if (kstrtouint (buf,10 , &sysctl_sched_tunable_scaling)) +if (kstrtouint (buf,10 , &scaling))return -EINVAL ; +if (scaling >=SCHED_TUNABLESCALING_END ) +return -EINVAL ; + + sysctl_sched_tunable_scaling = scaling;if (sched_update_scaling ())return -EINVAL ;