From f62a6ed00946e3e3f0fc2e52a8a205e4f93dafbb Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 28 Aug 2018 08:09:50 +0200 Subject: [PATCH] 4.4-stable patches added patches: sched-sysctl-check-user-input-value-of-sysctl_sched_time_avg.patch --- ...input-value-of-sysctl_sched_time_avg.patch | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 queue-4.4/sched-sysctl-check-user-input-value-of-sysctl_sched_time_avg.patch diff --git a/queue-4.4/sched-sysctl-check-user-input-value-of-sysctl_sched_time_avg.patch b/queue-4.4/sched-sysctl-check-user-input-value-of-sysctl_sched_time_avg.patch new file mode 100644 index 00000000000..77c81c2d0b2 --- /dev/null +++ b/queue-4.4/sched-sysctl-check-user-input-value-of-sysctl_sched_time_avg.patch @@ -0,0 +1,85 @@ +From 5ccba44ba118a5000cccc50076b0344632459779 Mon Sep 17 00:00:00 2001 +From: Ethan Zhao +Date: Mon, 4 Sep 2017 13:59:34 +0800 +Subject: sched/sysctl: Check user input value of sysctl_sched_time_avg + +From: Ethan Zhao + +commit 5ccba44ba118a5000cccc50076b0344632459779 upstream. + +System will hang if user set sysctl_sched_time_avg to 0: + + [root@XXX ~]# sysctl kernel.sched_time_avg_ms=0 + + Stack traceback for pid 0 + 0xffff883f6406c600 0 0 1 3 R 0xffff883f6406cf50 *swapper/3 + ffff883f7ccc3ae8 0000000000000018 ffffffff810c4dd0 0000000000000000 + 0000000000017800 ffff883f7ccc3d78 0000000000000003 ffff883f7ccc3bf8 + ffffffff810c4fc9 ffff883f7ccc3c08 00000000810c5043 ffff883f7ccc3c08 + Call Trace: + [] ? update_group_capacity+0x110/0x200 + [] ? update_sd_lb_stats+0x109/0x600 + [] ? find_busiest_group+0x47/0x530 + [] ? load_balance+0x194/0x900 + [] ? update_rq_clock.part.83+0x1a/0xe0 + [] ? rebalance_domains+0x152/0x290 + [] ? run_rebalance_domains+0xdc/0x1d0 + [] ? __do_softirq+0xfb/0x320 + [] ? irq_exit+0x125/0x130 + [] ? scheduler_ipi+0x97/0x160 + [] ? smp_reschedule_interrupt+0x29/0x30 + [] ? reschedule_interrupt+0x6e/0x80 + [] ? cpuidle_enter_state+0xcc/0x230 + [] ? cpuidle_enter_state+0x9c/0x230 + [] ? cpuidle_enter+0x17/0x20 + [] ? cpu_startup_entry+0x38c/0x420 + [] ? start_secondary+0x173/0x1e0 + +Because divide-by-zero error happens in function: + +update_group_capacity() + update_cpu_capacity() + scale_rt_capacity() + { + ... + total = sched_avg_period() + delta; + used = div_u64(avg, total); + ... + } + +To fix this issue, check user input value of sysctl_sched_time_avg, keep +it unchanged when hitting invalid input, and set the minimum limit of +sysctl_sched_time_avg to 1 ms. + +Reported-by: James Puthukattukaran +Signed-off-by: Ethan Zhao +Signed-off-by: Peter Zijlstra (Intel) +Cc: Linus Torvalds +Cc: Peter Zijlstra +Cc: Thomas Gleixner +Cc: efault@gmx.de +Cc: ethan.kernel@gmail.com +Cc: keescook@chromium.org +Cc: mcgrof@kernel.org +Cc: +Link: http://lkml.kernel.org/r/1504504774-18253-1-git-send-email-ethan.zhao@oracle.com +Signed-off-by: Ingo Molnar +Cc: Steve Muckle +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/sysctl.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/kernel/sysctl.c ++++ b/kernel/sysctl.c +@@ -342,7 +342,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_minmax, ++ .extra1 = &one, + }, + { + .procname = "sched_shares_window_ns", -- 2.47.3