| From c8f06ec51d099c389892daa81592a0cb9028ed8e Mon Sep 17 00:00:00 2001 |
| From: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> |
| Date: Wed, 27 Feb 2019 11:10:18 +0300 |
| Subject: sched/core: Handle overflow in cpu_shares_write_u64 |
| |
| [ Upstream commit 5b61d50ab4ef590f5e1d4df15cd2cea5f5715308 ] |
| |
| Bit shift in scale_load() could overflow shares. This patch saturates |
| it to MAX_SHARES like following sched_group_set_shares(). |
| |
| Example: |
| |
| # echo 9223372036854776832 > cpu.shares |
| # cat cpu.shares |
| |
| Before patch: 1024 |
| After pattch: 262144 |
| |
| Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> |
| Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Link: http://lkml.kernel.org/r/155125501891.293431.3345233332801109696.stgit@buzz |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| kernel/sched/core.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| diff --git a/kernel/sched/core.c b/kernel/sched/core.c |
| index 89c9c1d7d22c5..a75ad50b5e2ff 100644 |
| --- a/kernel/sched/core.c |
| +++ b/kernel/sched/core.c |
| @@ -6559,6 +6559,8 @@ static void cpu_cgroup_attach(struct cgroup_taskset *tset) |
| static int cpu_shares_write_u64(struct cgroup_subsys_state *css, |
| struct cftype *cftype, u64 shareval) |
| { |
| + if (shareval > scale_load_down(ULONG_MAX)) |
| + shareval = MAX_SHARES; |
| return sched_group_set_shares(css_tg(css), scale_load(shareval)); |
| } |
| |
| -- |
| 2.20.1 |
| |